我有一个手表设置反对ui-select2下拉(从ui-bootstrap)的模型。手表在载入时触发,但不是数据更改,我不知道为什么。
这不是通常的问题不应用模型更改或不使用第三个参数进行相等比较(至少从我的代码)。
我需要做什么来让它开火?
我修复了一些东西。
http://plnkr.co/edit/5Zaln7QT2gETVcGiMdoW?p=preview
JS
var myMod = angular.module("myApp",[]).controller("MainController",function($scope){ $scope.myModel = {selectedId:null}; }).controller("DetailController",function($scope){ $scope.items = [1,2,3,4]; $scope.watchHitCount = 0; $scope.$watch('myModel.selectedId',function(newVal,oldVal){ console.log(newVal + " " + oldVal); $scope.watchHitCount++; },true); });
index.html
<body ng-app="myApp"> <div ng-controller="MainController"> <ng-include src="'detail.html'" ng-controller="DetailController"></ng-include> </div> </body>
detail.html
<pre>watch hit: {{watchHitCount}}</pre> <pre>selected value: {{myModel.selectedId}}</pre> <select ng-model="myModel.selectedId" ui-select2=""> <option></option> <option ng-repeat="item in items" value="{{item}}">{{item}}</option> </select>
它抱怨没有找到控制器,所以我设置它的方式,我通常将使用一个命名的ng-app和一个模块声明已定义了控制器。
我还添加了一个对象来保存你的模型中的值。使用$ scope对象作为模型是不好的做法,相反,scope应该引用一个是你的模型的对象。