$ 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"/>
答案 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);
}