多个$ scope。$ watch在Angular JS中不起作用

时间:2017-07-04 13:13:42

标签: javascript angularjs

任何人都可以解释为什么只有下面的第一个$ watch在同一个控制器中触发?两个输入都是分配了每个ng模型的文本框。 (提前谢谢)

$scope.$watch('search', function() {
   if ($scope.watch !== ""){
       var filter = "{'name':{'$regex':'(?i).*"+$scope.search+".*'}}";
       fetch(filter);
      };
});


$scope.$watch('id', function() {
    if ($scope.id !== ""){
        var filter = "{'id':{'$regex':'(?i).*"+$scope.id+".*'}}";
        fetch2(filter);
    };
});

4 个答案:

答案 0 :(得分:1)

尝试使用此语法并查看您将在控制台中获得的内容

$scope.$watch('id', function(newVal, oldVal) {
    console.log(oldVal, newVal);
});

如果日志正常,为什么不尝试newVal这样的

$scope.$watch('id', function(newVal, oldVal) {
    if (newVal !== ""){
        var filter = "{'id':{'$regex':'(?i).*"+newVal+".*'}}";
        fetch2(filter);
    };
});

被修改

答案 1 :(得分:0)

//Try this
var deregWatchGroup = $scope.$watchGroup(['1stmodelValue', '2ndmodelvalue'], function (newValues, oldValues) {
         console.log(newValues[0], oldValues[0]); //for 1st model value
         console.log(newValues[1], oldValues[1]); //for 2nd model value
         // here you can handle your stuff
 });
  //destroying watch
 $scope.$on('$destroy', deregWatchGroup);

答案 2 :(得分:0)

要在同一个控制器中观看多个范围,您可以使用:

$scope.$watchGroup(['search', 'id'], function(newValues, oldValues) {

 newValues[0] -> $scope.search 
 newValues[1] -> $scope.id 

// Then perform your operations.

});

答案 3 :(得分:0)

谢谢大家。要回答,问题出在我的HTML渲染结果中,根本原因是我自己的白痴。我有一个无关的ng-show隐藏了结果。