2014-09-29 40 views
6

出於某種原因,綁定不上輸入ng-if塊中的指令內輸入工作結合停止NG-如果

所以這個工作,不工作:

app.directive 'foo', -> 
    restrict: 'E' 
    scope: 
     type:'=' 
    template: "<input ng-if=\"type === 'string'\" ng-model='filterText'> 
        <div> {{filterText}} </div>" 


<foo type="'string'" /> 

它的工作原理罰款指令或沒有ng-if罰款。用ng-if包裝輸入裏面的div沒有幫助。這是一個錯誤嗎?

jsbin link

+0

什麼是不工作?你的jsbin鏈接對我來說似乎很好。如果我將類型更改爲「測試」,則輸入隱藏。這不是你想要的嗎? – sma 2014-09-29 19:55:36

+0

不,你會發現它沒有顯示{{filterText}}。如果您刪除NG-如果它工作的罰款 – Agzam 2014-09-29 19:56:20

+0

可能重複[Angularjs NG的模型沒有在裏面工作NG-IF](http://stackoverflow.com/questions/18342917/angularjs-ng-model-doesnt-work -inside-ng-if) – zsong 2014-09-30 00:00:24

回答

4

它由導致NG-如果引入一個新的作用域的事實,你NG-模式「它沒有點」結合起來。

這工作:

template: "<div ng-init='holder={}'> <input ng-if=\"type === 'string'\" ng-model='holder.filterText'></div> 
       <div> {{holder.filterText}}</div>" 

請參見配置信息在https://docs.angularjs.org/api/ng/directive/ngIf並注意文本「這個指令將創建新的範圍。」 對於「點式模型」,見例如 Does my ng-model really need to have a dot to avoid child $scope problems?https://egghead.io/lessons/angularjs-the-dot 閱讀它會被正確讀取遍歷範圍原型,但修改它會被寫入到自己的範圍值,當值基本上當。

+0

我有一個鏈接到jsbin,隨時與那玩。顯然這不是範圍問題,這似乎是不同的 – Agzam 2014-09-29 19:53:02

+0

對不起,沒有注意到小藍鏈接。我不明白你爲什麼說「顯然這不是範圍問題」。看到我編輯的答案,我用代碼說明了我的觀點。 – 2014-09-29 20:02:48

+0

哦......有趣......這http://jsbin.com/penuhilahujo/9/edit工作。所以你是對的 – Agzam 2014-09-29 20:06:12

-3

<div>標籤沒有在你的榜樣關閉,也不是適用於該節點的ng-if

試試這個:

template: "<input ng-model='filterText'> 
        <div ng-if=\"type === 'string'\"> {{filterText}}"</div>" 
+0

哦......天哪......我修好了,我關了它,我修改了jsbin。它仍然不起作用 – Agzam 2014-09-29 20:01:17

+0

你錯過了點...我需要ng - 如果應用於輸入。根據'type',我想要有/沒有輸入字段 – Agzam 2014-09-29 20:03:02

1

由於ng-if創建一個新的範圍,你只需要做到這一點

ng-model='$parent.filterText' 

另外,請檢查該answer