为什么angularJs $ watch只运行一次

时间:2016-08-21 05:12:54

标签: javascript angularjs

表中的

代码只运行一次。 我该怎么办呢?

 this.$rootScope.$watch('tabType', () => {
            if (this.$rootScope["tabType"] === TabType.Sent) {
                this.$scope.refreshSentList();
            } else if (this.$rootScope["tabType"] === TabType.Archive) {
                this.$scope.refreshArchiveList();
            } else if (this.$rootScope["tabType"] === TabType.Inbox) {
                this.$scope.refreshInboxList();
            } else if (this.$rootScope["tabType"] === TabType.Snooz) {
                this.$scope.refreshSnoozList();
            } else if (this.$rootScope["tabType"] === TabType.Trash) {
                this.$scope.refreshTrashList();
            }
        },true);

2 个答案:

答案 0 :(得分:2)

因此,这个问题的可能原因是$watch在控制器启动时无法在视图中找到该元素。对于$watch绑定/工作,元素应该已经存在于视图中。

我的猜测 - 您必须在视图中使用ng-if。并且ng-if仅在条件为真时才创建元素。

我两次遇到这个问题,并且两次都删除了ng-if

答案 1 :(得分:0)

这是一个在ES5上运行的示例,如果我没错,我会看到你使用ES6。

然而,这不应影响$watch的工作方式

$scope.$watch('tabType', function (newValue, oldValue) {
    console.log(newValue);
    console.log(oldValue);
});

开头的this也是$watch

希望这能帮到你