如何让$ watch对typeahead做出反应?

时间:2015-07-29 01:36:36

标签: angularjs

$ watch似乎没有抓住因类型选择更改而改变的值。我希望它能对变化作出反应......

  $scope.vm = 1; 
  $scope.$watch(function() { return $scope.vm }, alert('hi') );

<input type="text" ng-model="$scope.vm " typeahead="item as item.description for item in items  | filter:$viewValue | limitTo:8" class="form-control"/>

PLUNK

2 个答案:

答案 0 :(得分:2)

$watch的第二个参数是一个函数。您正在立即执行该函数,然后将alert的结果传递给$watch(不记得但可能为null或未定义)。你需要把它包起来:

  $scope.vm = 1; 
  $scope.$watch(function() { return $scope.vm }, 
                function(newValue, oldValue) { alert('hi'); } );

编辑

您不需要在html中包含$scope变量,它应该只是vm。范围隐含地应用于标记。

答案 1 :(得分:2)

你应该ng-model="$scope.vm" vm,而paulpdaniels表示你需要将alert包装在你的监听器回调中。

此外,您可能会发现将处理程序方法传递给typeahead-on-select属性比将$watch函数放入控制器更清晰。

<强> HTML

<input type="text" ng-model="vm" typeahead-on-select="change(vm)" typeahead="item as item.description for item in items | filter:$viewValue | limitTo:8&#34;类=&#34;形状控制&#34; /&GT;

<强>控制器

$scope.change = function(vm){
   console.log('vm', vm);
}