为什么更改范围获胜'不能在ng if内部工作,而是通过函数调用AngularJS
Why changing a scope won't work inside a ng-if but via function call - AngularJS
以下是我在其中切换hideQA
值的代码片段,该值在这两种情况下都会正确更改,但如果我正在执行-,则不会正确隐藏div
`<button ng-click="hideQA = !hideQA">Reset</button>`
但是,如果我改变一个方法的值,比如-,它是正确的
`<button ng-click="resetForm()">Reset</button>`
有人能解释一下背后的原因吗?
工作Plnkr-http://plnkr.co/edit/rIAAcibX2Ts1VaMWKQtc?p=preview
ng-if
有自己的$scope
,当元素被移除时,$scope
也会被移除。因此,您必须使用$parent
参考父作用域
<button ng-click="$parent.hideQA = !hideQA">Reset</button>
另一种选择是使用ng-show
<div class="message" ng-show="hideQA !== false">
This is div two !!!
<button ng-click="hideQA = !hideQA">Reset</button>
</div>
这是因为范围之间的确定性限制。
为了对此没有问题,您必须使用点表示法。
参见plunkr:http://plnkr.co/edit/ES9qTl7nsmGGOJnE0H8u?p=preview
有关点标记的更多解释,请参阅文章
以下是您的点符号代码:
<button ng-click="a.hideQA = !a.hideQA">Reset</button>
$scope.a = {hideQA:false};
$scope.a.hideQA = true;
上面给出的答案已经解决了这个问题。这是我的工作plunkr链接:http://plnkr.co/edit/ZdL441bBmQToGZn4gfQt?p=preview.我要说的是:
当你使用ng-if
时,它会创建自己的范围,来自angularjs官方文档:
在ngIf中创建的作用域使用原型继承从其父作用域继承。
简而言之,当引用其父作用域中的值时,只复制主类型(如string
、integer
、boolean
等)的值,而不复制值的引用(或pointer
)。这意味着它是单向引用,而不是双向引用。因此,为了使用双向,最佳实践是始终使用javascript object {attr: value}
。因此推荐使用.
。
这是一篇关于作用域的非常好的文章,值得20分钟的准备https://github.com/angular/angular.js/wiki/Understanding-Scopes
希望这能帮助你:)
- appendChild在函数外部工作,但在函数内部不工作
- 我对“;返回true"嵌套函数内部;t工作
- 谷歌分析跟踪内部链接不正常工作的事件
- 循环内部的递归函数未按预期工作
- JS Promises如何在内部工作
- 角度控制器功能不;在指令内部调用时,似乎无法始终如一地工作
- 为什么更改范围获胜'不能在ng if内部工作,而是通过函数调用AngularJS
- Array.prototype.stice.call()的内部工作
- 承诺内部工作
- CSS和Javascript可以在内部服务器上工作,但不能在外部工作
- .htaccess和.htpasswd的内部工作方式
- 只有在文档内部的警报准备就绪后,触发器才能工作
- ASP表单在服务器上运行,不允许内部HTML按钮onlick setInterval工作
- 内部链接返回空错误,我在 Javascript 中找不到错误.外部链接工作得很好
- 使用 ajax 作为注释表单,它给了我 500 个内部错误,但没有脚本它可以工作,这意味着我的脚本是错误的;对
- 对象引用如何在 javascript 内部工作
- D3 内部的 for 循环未按预期工作
- 无法获得控制台.log在 CasperJS 中评估内部工作
- JavaScript 函数在函数内部重写自身,它在幕后是如何工作的
- 谷歌地图不工作内部引导手风琴