如何将侦听器附加到angularjs控制器内的变量?

时间:2015-07-22 08:41:21

标签: angularjs

我想在titleChanged变量中附加一个监听器。 我试过这种方式,但它抛出了这个错误

TypeError:this。$ watch不是函数

        var titleChanged = false;

        function titleTrue() {
            titleChanged = true;
        };
        $scope.$watch('title',function(newValue, oldValue) {
            if (newValue !== oldValue) {
                $timeout(titleTrue(), 5000)
            };
        });
        this.$watch('titleChanged', function(newValue){
            if(newValue === true) {
                    updateNote();
                    titleChanged = false;
                };
        });

更新的代码另一个apprach

        var titleChanged = false;

        $scope.$watch('title',function(newValue, oldValue) {
            if (newValue !== oldValue) {
                titleChanged = true;
            }
        });

        while (true) {
            $timeout(checkForChangeAndSave, 3000);
        };

        function checkForChangeAndSave() {
            if(titleChanged) {
                updateNote();
                titleChanged = false;
            }
        }


        function updateNote() {
            notesService.update($stateParams.id, {title: $scope.title});
            notesService.getAll();
        };

1 个答案:

答案 0 :(得分:3)

this最有可能引用您案例中的控制器对象(除非您手动绑定到另一个值(或者您已将this.$watch设置为另一个值功能范围))。它没有$watch方法。

然而,

$scope有这样的方法。如果你想查看本地非暴露变量的值,你可以这样做:

$scope.$watch(function () { return titleChanged; }, function (v) {
  console.log(v);
});