javascript - 从 ng-include 上的单独 Controller 设置时 $parent 变量损坏

标签 javascript angularjs angularjs-scope

我很难理解为什么下面的代码完全停止工作。基本上,当我尝试使用 $parent 范围中的 ng-show 隐藏和显示 ng-include 时,它​​工作得很好。例如,在附加的 plnkr 中,如果您点击“新建”,然后点击“取消”,或者只是“切换”,ng-include 的可见性将被适当设置。

但是,如果我尝试从子范围取消设置可见性,它会工作一次,然后完全失败。当您点击 ng-include 中的“取消”按钮时,控制可见性的父范围中的变量“createItemVisible”会以某种方式损坏。

我已经阅读了许多关于 $parent 范围的其他帖子,但我从未见过一次提到它在哪里工作,然后就再也没有提到过。

plnkr 在这里 http://plnkr.co/edit/1tNpTzEBnTRHgvx6o0dc?p=preview

这是index.html代码:

<div ng-controller="MainCtrl">
<h3>Items</h3>

<button type="button" class="btn btn-primary" ng-click="createItem()">Create New Item</button>
<button type="button" class="btn btn-alert" ng-click="createItemVisible=!createItemVisible">Toggle</button>
<button type="button" class="btn btn-danger" ng-click="createItemVisible=false">Cancel</button>

<div ng-include="'inlineform.html'" ng-show="createItemVisible"></div>

</div>

这是 inlineform.html 代码:

<div ng-controller="ItemDetailCtrl">
  <button type="button" class="close" ng-click="cancelItemDetail()">&times;</button>
  <h3>New Item</h3>

  <button ng-click="cancelItemDetail()" class='btn btn-danger'>Cancel</button>
</div>

这是脚本:

var myApp = angular.module('myApp', []);

myApp.controller('MainCtrl', function($scope) {

  $scope.createItemVisible = false;

  $scope.createItem = function() {
    $scope.createItemVisible = true;
  };

});

myApp.controller('ItemDetailCtrl', function($scope) {

  $scope.cancelItemDetail = function() {
    $scope.$parent.createItemVisible = false;
  }

});

最佳答案

根据 Ilan Frumer 的评论,我能够更好地理解您不应该在作用域上使用基元。我创建了一个命名空间来保存我的变量。

var main = {
  createItemVisible : false
};

然后我向范围注册了这个命名空间。

$scope.main = main;

然后我相应地更新了所有引用资料。

这是更新后的 plnkr http://plnkr.co/edit/1tNpTzEBnTRHgvx6o0dc?p=preview

关于javascript - 从 ng-include 上的单独 Controller 设置时 $parent 变量损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26898132/

相关文章:

javascript - 如何使用函数更改 ng-init 值?

javascript - 指令采用同一实例的范围

javascript - AngularJS - 递归函数禁用 $scope.on ('destroy' )

javascript - 使用 ".click()"仍会触发禁用按钮

javascript - 正则表达式不适用于 jsp java 中的数字

javascript - 如何从与当前 TD 具有相同索引的下一行获取 TD

javascript - 当您在 javascript 中使用 document.getElementsByTagName() 时,您会得到所有元素的数组吗?

angularjs - 为什么 ng-disabled 不起作用?

angularjs - 绑定(bind) Angular 日期选择器和时间选择器

javascript - 如何使 AngularJS 指令在不隔离范围的情况下明确定义其依赖项