任何人都可以解释为什么只有下面的第一个$ 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);
};
});
答案 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隐藏了结果。