2015-10-15 88 views
2

我想從定義ng-controller的相同標記訪問角度控制器屬性,如果屬性languages的屬性少於一個,則使用ng-if隱藏標記。從根節點訪問AngularJs控制器屬性ng-if

準確地說這是我的不工作密碼樣子:

<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顯示工程?

回答

1

您可以在定義控制器的相同元素中訪問ng-if或其他ng指令。

NG-如果

ngIf指令刪除或重新創建基於一個{表達式} DOM樹 的一部分。如果分配給ngIf的表達式將 評估爲false值,則將該元素從DOM中移除,否則將該元素的一個 克隆重新插入到DOM中。

納克放映

ngShow指令顯示或隱藏基於 提供給ngShow屬性表達給定的HTML元素。該元素顯示爲 ,或者通過在 元素上移除或添加.ng-hide CSS類來隱藏該元素。

ng-if移除或重新創建元件設置li元件特性,條件成爲假和NG-如果除去controller和整體元件時,這意味着。

對於ng-show它只是顯示或隱藏元件不添加或在開始if條件false它僅隱藏元件不刪除它,並且當$scope結合元件,它示出了數據,因爲條件變爲真除去如此。下面

檢查片斷

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 = []; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<body ng-app="myApp"> 
 
<li ng-controller="MyCtrl" ng-show="addresses.length > 0">Billing State: <tt>State selected: {{addresses}}</tt> 
 
</li> 
 
    <li ng-controller="MyCtrl1" ng-show="addresses.length > 0">This will not show.<tt>State selected: {{addresses}}</tt> 
 
</li> 
 
    </body>

+0

非常感謝..這是可能的。現在只有我意識到問題是'ng-if'不能刪除它在根元素中的項目。我將更新問題:) –

+0

非常感謝你:) –

1

作爲一個簡短的答案:沒有。

因爲當你在你的根元素上時,你的控制器還沒有在這裏。所以當前的作用域是父控制器的作用域(如果這是你的第一個控制器,則作用域的作用域)。

+0

謝謝你讓我怎麼能刪除根標籤?我是否需要使用父控制器來執行此操作? –

+0

只有'語言'是父控制器的屬性時才能這樣做。 – Magus