AngularJS $ scope。$ watch在我的控制器的所有实例中触发

时间:2016-05-05 09:01:18

标签: javascript angularjs

我有一个名为SearchDatatablesContactsCtrl的控制器,其定义如下:

function SearchDatatablesContactsCtrl($scope, $state, $stateParams, ...) {
    $scope.controllerName = "SearchDatatablesContactsCtrl";
    var vm = this;
    vm.instanceName = "SearchDatatablesContactsCtrl_" + new Date().getTime();
    vm.nameValues = {};

    if ($stateParams.nameValues !== null && $stateParams.nameValues.personId != "") {
        vm.nameValues.personId = $stateParams.nameValues.personId;
        vm.nameValues.kindOfSearch = $stateParams.nameValues.kindOfSearch;
    } 


    $scope.$watch(function(){
        return vm.nameValues;
    }, function(newValue, oldValue){
        console.log("watch executed for " + vm.instanceName);
        //http request to fill datatable
    });

    ...

我的视图有树标签,每个表格使用通过$ stateProvider.state注入的SearchDatatablesContactsCtrl。当我使用ng-model附加到nameValues的文本字段搜索值时出现问题, 它运行3个http请求以获取数据表的值(每个实例一个)。

执行结果是:

watch executed for SearchDatatablesContactsCtrl_1462436421603
watch executed for SearchDatatablesContactsCtrl_1462436421703
watch executed for SearchDatatablesContactsCtrl_1462436422023

有没有办法强制控制器的实例只监视其范围的变化?

提前致谢

0 个答案:

没有答案