从根节点ng-if访问AngularJs Controller属性

时间:2015-10-15 14:58:47

标签: javascript angularjs html5

我想从定义ng-controller的同一标记访问角度控制器属性,如果属性ng-if少于一个元素,则使用languages隐藏标记。

准确地说,这就是我的无效代码

<li ng-controller="LanguageController" ng-if="languages.length > 1">
    ...
</li>

但如果我做了类似的事情,那么就可以了

<li ng-controller="LanguageController">
    <div ng-if="languages.length > 1">...</div>
</li>

当我尝试这个时

<li ng-controller="LanguageController" data-val="{{languages.length}}">
...

输出为... data-val="1"..,表示

  

我可以访问根元素本身的属性

要添加它,当我使用ng-show隐藏我的根元素时,它也有效。感谢@ sarjan-desai。

<小时/> 问题但仍然为什么ng-if无效并删除我的根li对象,而ng-show有效?

2 个答案:

答案 0 :(得分:1)

简短回答:不。

因为当你在你的根元素上时,你的控制器还没有。因此,当前范围是父控制器的范围(如果这是您的第一个控制器,则为根范围)。

答案 1 :(得分:1)

您可以在定义控制器的同一元素中访问ng-if或其他ng指令。

<强> NG-如果

  

ngIf指令删除或重新创建DOM树的一部分   基于{表达式}。如果分配给ngIf的表达式求值   如果为false,则从DOM中删除该元素,否则为a   将元素的克隆重新插入DOM。

<强> NG-展示

  

ngShow指令显示或隐藏基于的给定HTML元素   表达式提供给ngShow属性。元素显示   或通过删除或添加.ng-hide CSS类来隐藏   元件。

ng-if 删除或重新创建元素,这意味着在设置li元素属性时,条件变为false,ng-if删除controller和整个元素。

对于ng-show,只有显示或隐藏元素才能添加或删除,因此在启动条件false时它只隐藏元素而不删除它以及{ {1}}绑定到元素,它显示数据,因为条件变为真。

检查以下代码段

&#13;
&#13;
$scope
&#13;
var myApp = angular.module('myApp', []);

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

  $scope.addresses = [{
    'state': 'AL'
  }, {
    'state': 'CA'
  }, {
    'state': 'FL'
  }];
});

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

  $scope.addresses = [];
});
&#13;
&#13;
&#13;