从控制器访问ngModel并监视更改

时间:2015-01-15 17:23:47

标签: angularjs angularjs-directive ionic-framework

我制作的自定义指令效果很好。它的掠夺者是http://plnkr.co/edit/GxM78QRwSjTrsX1SCxF7?p=preview

在该指令中有ngModel调用 deptStation 我想在控制器中访问它,以便我可以将其用作其他函数中的参数来创建新数组。我也想看一下我可以称之为功能的每一个变化。

    <plexus-select items="deptStations" header-text="Select station" text="Select departure..." text-icon="ion-chatbubble-working" text-field="City_Name_EN" text-field2="City_Code" value-field="City_Code" ng-model="deptStation">
   </plexus-select>

我尝试编写下面的代码,但它没有显示控制台日志

$scope.$watch('deptStation', function(newValue, oldValue) {
  if(oldValue != newValue) {
    // perform something
    console.log('New Value ' + newValue);
  }

1 个答案:

答案 0 :(得分:1)

我对离子指令并不完全确定,但您的问题可能是因为一个或多个离子指令创建了一个新范围,因此只需执行ng-model="deptStation"就可以在该范围内创建新属性而不是你的控制器。

要避免这些问题,您应确保不要绑定到基元,而是绑定数组/对象。您应该像这样创建属性(为了清楚起见,重命名为selectedStation):

$scope.selectedStation = {value: null};

然后你的手表会起作用:

$scope.$watch('selectedStation.value', function (station) {
    console.log('watch', station);
});

http://plnkr.co/edit/96VgPzEXZuzxmHt32Afy?p=preview

正如@ m59所说,看起来你使用双向绑定比使用ng-model更好。