一尘不染

AngularJS:ng-如果不能与ng-click结合使用?

angularjs

给定使用AngularJS 1.2 rc3的测试用例:http :
//plnkr.co/edit/MX6otx(以下重复)

1。

<li ng-init="toggle1 = false">
    ng-if toggle1: {{ toggle1 }}
    <p>
        <button ng-if="!toggle1" ng-click="toggle1 = true">Turn On</button>
        <button ng-if="toggle1" ng-click="toggle1 = false">Turn Off</button>
        does not work
</li>

2。

<li ng-init="obj={toggle2:false}">
    ng-if obj.toggle2: {{ obj.toggle2 }}
    <p>
        <button ng-if="!obj.toggle2" ng-click="obj.toggle2 = true">Turn On</button>
        <button ng-if="obj.toggle2" ng-click="obj.toggle2 = false">Turn Off</button>
        then why does this work?
</li>

问题:

  1. 为什么1不起作用?
  2. 1个应该工作吗?
  3. 为什么2起作用?
  4. 2应该工作吗?
  5. 我可以依靠2来进行AngularJS的将来更新吗?

阅读 211

收藏
2020-07-04

共1个答案

一尘不染

  1. 为什么1不起作用?: 因为ngIf定义了自己的作用域,它通常是从其父作用域继承的(就像ngRepeat一样)。因此,当您更改ngIf内部字段的值时,请在ngIf范围而不是其父范围中更改它。
  2. 1个应该工作吗?:
  3. 2为什么起作用?: 因为在这种情况下,您需要通过继承来修改ngId范围所引用的对象的 内容
  4. 2应该工作吗:
  5. 我可以依靠2在AngularJS的未来更新中工作吗: 为什么不呢?

https://github.com/angular/angular.js/wiki/Understanding-
Scopes中很好地解释了该范围继承机制。

2020-07-04