Angular $ watch与州提供商无法正常合作

时间:2017-04-13 14:00:04

标签: angularjs angular-ui-router

我想观察stateProvider中每个视图中的输入。 我准备了Plunker,它显示了问题所在。 Plunker

我使用这样的$ watch:

  $scope.$watch('Group', function(newValues, oldValues) {
      console.log(newValues);
 }, true);

如果我将数据添加到输入1或输入2,那么$ watch也会观察输入3和4。 但是如果我首先将数据添加到输入3或输入4,则$ w​​atch不会观察这些输入。可能是什么问题?

2 个答案:

答案 0 :(得分:1)

您没有为其他州提及controller。所以它不会工作。

要使用相同的控制器$scope,您需要在$scope.Group = {};内创建mainController

当您在item1 and 2中加入价值时,您的plunker会有效,因为$scope.Group已创建并且您利用了prototypal inheritance.的好处

当您将值item3 and 4放入state时,您的助手无法正常工作,因为没有与您的$scope.Group相关联的控制器,mainController $scope上不存在此类{{$$childHead.Group}} - {{$$childTail.Group}} 1}}。

  

进一步:尝试放item 3 & 4   在您的Plunker HTML中,看到$('#toggle').on('click', function(){ var v = $('#number').val() || 0; $('#mainview > tbody > tr > th:nth-child('+v+')').toggle(); $('#mainview > tbody > tr > td:nth-child('+v+')').toggle(); });被创建为子级   范围。

请参阅此working plunker.

Read more here

答案 1 :(得分:0)

您还必须将ng-controller='mainController'放入模板中。

您可以将它放在输入标记中,如下所示:

<input ng-controller="mainController" type="text" ng-model="Group.item4" placeholder="Group.item4">