首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何实现下拉列表更改事件捕获函数

如何实现下拉列表更改事件捕获函数
EN

Stack Overflow用户
提问于 2017-07-29 08:45:35
回答 1查看 91关注 0票数 1

我的html文件中有这样的内容:

代码语言:javascript
运行
复制
<select ng-model="selectedCar" ng-change="changedValue(selectedCar)" ng-options="x.license for x in fhu.carList" >
        <option value="">Select Car</option>
</select>

如何并将changedValue函数放在我的控制器内?我在这个角度和JavaScript上有点新,所以一个具体的例子会很好。我的控制器在下面,下拉列表填好了.almost。但这是另一个问题,在这一点上,选择变化函数更重要。

代码语言:javascript
运行
复制
(function() {
    var app = angular.module("fhu", []);

    app.controller("FhuController", function(){

        this.carList = cars;

    });


    $(document).ready(function(){

        var car = {};

        $.getJSON("fillingapi.php?action=get_cars",function(data){
             var i=0;
             for(i=0;i<data.length;i++){

                cars.push( {license: data[i].license, descr: data[i].descr});               

            }
        });
    });

    var cars=[];

    })();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-29 10:35:03

要回答您的问题:“在我的控制器中放置changedValue的位置”,您已经做了ng-model="selectedCar“。角斗士会帮你更新的。因此,在您的控制器,您可以做$scope.selectedCar,并得到汽车,是从下拉选择的。

来解释一下:

  • 你把角和jquery混在一起。这并不是禁止的,但它并没有真正增加任何东西,可能会使事情复杂化。他们在如何操纵观点方面有不同的策略。
  • 角是双向结合的。您不需要在文档准备好时收听。这是jquery代码。角将为您自动更新范围和视图。
  • 同样,在angularJS中使用这个关键字可能会导致一些范围问题,所以使用$scope代替。
  • 您正在使用jquery的$.getJSON获取数据。您可以使用角$http组件代替。

我用工作例子做了一个柱塞:https://plnkr.co/edit/1xqvFVTed9I7lJj9NkFH?p=preview

代码语言:javascript
运行
复制
var app = angular.module('fhu', []);

app.controller('FhuController', function($scope, CarService) {
    $scope.selectedCar;

    CarService.getCars().then(function(listOfCars) {
      console.log(listOfCars);
      $scope.carList = listOfCars;
    });

    $scope.changedValue = function() {
      alert('You just selected '+ $scope.selectedCar.licence);
    }              
});

app.factory('CarService', function($http) {

  const getCars = function() {
    return $http.get('https://www.rantakallio.fi/fillherup/fillingapi.php?action=get_cars');
  };

  return { getCars };
});

让我们看一看代码:

  1. 我删除了函数包装。
  2. 我删除了jquery document.ready。
  3. 我删除了jquery,并使用了.getJson的$http组件,它可以完成同样的任务。
  4. 我为你的http请求提供了服务。它基本上将请求封装在一个工厂/序列化中,您可以在代码中的任何地方注入它。因此,如果有另一个控制器,需要得到的汽车清单。您可以注入CarService

查看CarService.getCars()行。getCars是名为CarService的工厂中的函数。我让它返回一个简单的承诺,您需要使用$http compnent (它的注释掉了)。

我只需返回承诺并在控制器中展开它,并将值放入我的carList变量。当角看到变量已经改变时,它将为您更新视图。当您从select列表中进行选择时,也会发生同样的情况。因为您将ng- model ="selectedCar“放在视图中,angular将为您更新模型。因此,您可以在控制器中使用它来做一些事情。

在代码示例中,您可以看到不需要将值传递给函数。你只需阅读$scope.selectedCar

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45387301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档