父控制器上的$ scope。$ watch不会在子ng-select上触发

皮特

用例

使用select绑定到控制器变量的a,只要变量在父控制器中存在并且在父$watch变量中的该变量上创建a ,父触发器$watch就不会触发。为什么会这样?

代码

随机数据生成器实用程序功能

该代码并不重要,但为清楚起见而包含在内。

function populate(x) {
    var items = [];
    for (var i = 0; i < x; i++) {
        items.push( { label: 'item ' + i,
                     data: { value: 'some value ' + i },
                     id: i });
    }
    return items;
};

上级主管

function parent($scope) {
  $scope.items = populate(10);
  $scope.selected = $scope.items[0];
  $scope.fired = 0;

  $scope.$watch('selected.id', function(id) {
      $scope.fired++;
  });
};

子控制器

function child($scope) {

};

场景1

此方案按说明工作。在这种情况下,$scope.fired只要用户更改选择的值,变量就会增加。jsFiddle

看法
<div ng-app>
    <div ng-controller="parent">
        <select ng-model="selected"
                ng-options="item as item.label for item in items">
        </select>
        <pre>
            {{ fired | json }}
        </pre>
        <pre>
            {{ selected | json }}
        </pre>
    </div>
</div>

方案2

在下列情况下,$watch不会在父触发。但是,如果将$watch移至子控制器,它将触发。注意:与上面的代码相比,更改在第3行。jsFiddle

看法
<div ng-app>
    <div ng-controller="parent">
        <div ng-controller="child">
            <select ng-model="selected"
                    ng-options="item as item.label for item in items">
            </select>
            <pre>
                {{ fired | json }}
            </pre>
            <pre>
                {{ selected | json }}
            </pre>
        </div>
    </div>
</div>

问题

为什么包含子控制器$watch,即使子控制器继承了,也不会触发$scope

弗里兹

父母selected没有改变自己。子范围selected是。这就是为什么手表无法正常工作的原因。这是由于原型继承。

$watch本身应该在儿童范围进行定义,而与父范围是一个宣称它在首位的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

$ scope。$ watch不会在每次更改时触发

angular keyup事件不会在子组件上触发,而只会在父组件上触发

CodeIgniter不会在'/'上加载默认控制器

Symfony不会在控制器上缓存更改

ng-click 不会在表 td 单击上触发控制器功能,该表在控制器初始化后稍后呈现

$ scope。$ watch不触发(控制器为vm)

scope。$ watch在控制器内不触发

CSS:子元素不会在父元素上触发悬停

ngRoute不会在angularjs控制器中触发

OnLongClickListener不会在ViewPager上触发

Javascript 单击侦听器,但不会在子元素上触发?

Rails不会在FreeBSD 9.1中的每个请求上重载控制器,助手

父控制器上的调用方法?

ng-enter不会在ui-view上触发,ui-view是页面刷新时另一个ui-view的子级

角度UI路由器视图的控制器会导致$ scope。$ watch不触发吗?

ng-show不会在AngularJS的routeChange上更改

Bootstrap Select不会在移动设备上触发更改事件

angular2子组件不会在从父组件触发的后续事件上加载

(iOS)音频播放器作为应用程序中所有父视图控制器上的子视图控制器

Spring MVC不会在HTTP POST中自动装配,而是在同一控制器上的Ajax中装配

Pointermove不会在IE上触发触摸

重大位置更改不会在设备上触发

不会在TextInputEditText android上触发onClick事件

OnPageIndexChanging事件永远不会在GridView上触发

音频事件不会在播放事件上触发jquery

WebRTC永远不会在IceCandidate上触发

Ionic:Touchstart 和 Touchend 不会在 Android 上触发

fcitx不会在超空间上触发IME

不显眼的验证不会在单选按钮上触发