我想从定义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有效?
答案 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}}绑定到元素,它显示数据,因为条件变为真。
检查以下代码段
$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;