2015-10-05 61 views
1

我有一個自定義角指令2路結合,並且它具有映射爲2路結合 鹼值基地=「=」用於指示不工作

從父範圍我通過分離的範圍基地指令作爲

,並在指令控制器我修改此基值。基礎不僅僅是一個對象,而是一個擁有自己內部數組的json結構。我橫切基地內的幾個領域,然後改變這些領域的價值。例如,一個字段從0更改爲1.

現在,在父控制器中的另一種方法中,我從原始JSON中將其傳遞到指令的位置選擇此基礎。我期望在指令中改變的值能夠反映在原始的JSON對象中。

不幸的是,這沒有發生。我想雙向綁定前綴應該可以。 很抱歉,由於指令模板太大,我目前沒有上傳它。如果可能,稍後我會嘗試上傳微型版本。

與此同時,我是否在某個地方出了問題,是否有特別需要做的事情?

說明這一點的工作小提琴可能會有所幫助。我搜索了一下,發現了一些叫做$ broadcast和$ emit的東西。我不知道如何在這種情況下使用它們,也從未使用過它們。

期待一點幫助傢伙..

編輯:

return { 
      scope: { 
       parent: '=' 
       item: '=', 

      }, 
controller: 'ctrlname', 
templateUrl:'tplname', 
    link: function (scope, element, attr) { 
} 
在HTML類似

<li ng-repeat= l in originalJSON> 
    -----------something here------ 
    <li ng-repeat= base in l> 
    ---------something here------- 
     <li ng-repeat="x in base.y"> 
<div layout="row" layout-wrap directive-name parent="base" item="item" ></div> 
</li> 
</li> 
</li> 

對不起這是 '='

只需多加一個重要信息。在父控制器中,我試圖訪問originalJSON並在其中的基本字段中查找修改的字段。

+0

你會上傳你的指令html行,只是你的指令的隔離範圍部分? – Sam

+0

提供相關代碼 – charlietfl

+0

「@」用於單向綁定,用於雙向使用'=' –

回答

0

你已經是多個指令結合兩種方法對同一對象的問題。

這條線出現多次(等於基地項目數):

<div layout="row" layout-wrap directive-name parent="base" item="item" ></div> 

所以,你有父母和基地之間的幾個雙向綁定。這些都是坐在一個for循環,它將在任何變化的基礎上觀察基礎並根據需要更新循環。我想這可能很容易導致代碼中的問題。

也許,你可以綁定到x?

編輯澄清(按要求評論): 你有你的'基'對象正在更新,這是使用雙向綁定多個指令。因此,您有: 基本對象'a'與指令1中的對象'b'保持同步。 基本對象'a'與指令2中的對象'c'保持同步。 基礎對象'a'與指令3中的對象'd'保持同步。

等等在for循環中。然後,當你的指令正在被處理時,你有一些更新b,c和d的邏輯 - 這又反過來你希望更新a。這些事件可能都會在同一時間發射。每次他們觸發時,你的for循環(循環遍歷a中的元素)識別'a'已經改變並且說'讓我們再次計算循環的結果'。然後,每個指令都將被重新創建 - 也許會引發更多的邏輯來改變。 您的問題中沒有足夠的信息來說明這是問題,但希望您能從我的描述中看到競爭狀況可能是問題。相反,在for-loop中綁定到x(並且如果需要,可以使用單向綁定到基礎對象)應該是實現您想要的更安全的方法。

+0

您的回答讓我擔心。你在這裏看到什麼樣的問題。如果您能提前通知我,我將不勝感激。我是新來的角色,並沒有那麼好的遠見。 –

+0

已更新。你嘗試綁定到x?這應該是一個簡單的方法,看看這是否能解決您的問題。 – Sam

+0

此外,我會建議在指令和控制器中添加一個watch語句($ watchCollection) - 然後它可以簡單地註銷JSON,在更改時顯示newValue和oldValue – Sam

1

您不能使用服務/工廠共享基礎對象。父範圍也是一個指令?

+0

號碼父範圍是ctrl –

+0

您可以將範圍從控件移動到服務 – Sam

0

@不是一個雙向綁定,雙向綁定,您需要使用=

scope: { 
    "twoway": "=" // two way binding 
    },