javascript - 能否在使用它的 block 内修改 ng-if 变量?

标签 javascript angularjs angular-ng-if

我觉得这个问题很奇怪。

基本上,我希望根据 ng-if 条件在页面上存在一个 block 。但是当我尝试修改所述 block 内的 ng-if 时,它对任何其他元素没有任何影响。

为什么会这样?

The JSFiddle is here代码如下:

<div ng-controller="MyCtrl">
    <div ng-init="shouldShow=false">
        <div ng-if="!shouldShow">
            <p>{{shouldShow}}</p>
            <div>
                <button ng-click="shouldShow=!shouldShow">Hide Section</button>
                <button ng-if="!shouldShow">Should Disappear</button>
            </div>
        </div>
    </div>
</div>

最佳答案

这是 ng-if 子作用域的问题,事实上您正在尝试在子作用域中双向绑定(bind)原语。

您应该始终尝试将范围内的对象用作模型,以便您利用原型(prototype)继承的好处。

看这里的区别:

<div ng-controller="Ctrl">
      <div >
        <p>{{model.shouldShow}}</p>
        <div ng-if="!model.shouldShow">
            <button ng-click="model.shouldShow=!model.shouldShow">Hide Section</button>
            <p>{{model.shouldShow}}</p>
        </div>
    </div>
</div>

JS

function Ctrl($scope) {
    $scope.model={shouldShow:false}
}

另请阅读 ng-init 的文档。它不应该用于任意变量。它的主要目的是为 ng-repeat

中的变量别名

DEMO

关于javascript - 能否在使用它的 block 内修改 ng-if 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28793130/

相关文章:

java - 我需要添加一个等待,直到我得到来自带有 selenium-java 的 Angular http 请求的响应

angularjs - 可以从 Angular ng-click 表达式调用 'alert()' 或 'console.log()' 吗?

angularjs - ng-if 在 ng-repeat 中不起作用

javascript - Angular 5中类型复选框的动态输入

javascript - 除非我打开 Firebug,否则 ExtJS 面板无法正确呈现?

javascript - 带有堆叠列的 Bootstrap 网格

javascript - 在 Nodejs 中编辑所需/导出的变量

javascript - 如何在node.js中指定模块路径

javascript - 如果所有子组件都被隐藏,如何隐藏组件 ngIf

angular - Angular 模板中的可重用片段