2016-02-29 63 views
0

NG-節目時,不會在下面的代碼NG-顯示內部沒有NG,如果部分

<button ng-click="itemIndex=0;showHome=true;" class="btn btn-link">Home</button> 

<div ng-if="itemIndex==0"> 
    <div ng-show="showHome">{{showHome}} 
     <h3>Home Section</h3> 
     <img ng-click="showHomeItems=showHomeItems?false:true;showHome=false;" ng-src="images/home.png"/> 
    </div> 
    <div ng-show="showHomeItems"> 
     Home Items{{showHome}} 
    </div> 
</div> 

工作沒有NG-如果它工作正常,但與NG-如果它不工作。

+0

NG-如果創建一個子範圍。嘗試'$ parent.showHome'或者將'showHome'包裝在一個對象中,這樣可以將引用傳遞給子對象。 –

+0

,這有助於感謝。 @JamesBrierley – Ram

回答

0

嘗試聲明一個變量是這樣的:

$scope.switch = {showHome : true} 

,然後用它在HTML這樣的:

<div ng-show = "switch.showHome" > 
+0

它的工作,但你能解釋我是如何不同於$ scope.showHome = true或$ scope.showHome = false ...除了beiing對象? – Ram

+0

@Ram對象是一個引用類型。當創建子作用域時,它會複製其父作用域的所有值。如果它們是引用類型,那麼這兩個範圍都將包含對同一對象的引用,所以任何一個作用域都可以進行其他可以看到的更改。如果它們是原始類型(如布爾值),那麼每個範圍將只會看到它所做的更改。 –

+0

非常感謝你@JamesBrierley – Ram

1

閱讀此article

在Angular中有一些指令可以創建子範圍,如ng-repeat,ng-if

在這些範圍內,布爾值(如showHome)僅在新範圍內搜索,而不在父範圍內搜索。

爲了避免出現這樣的錯誤,將邏輯放置在控制器(或服務,而不是HTML中)中的對象內部,這不是一個基本變量,並將在範圍內查找原型鏈。

+0

,這有助於感謝。 – Ram