2013-12-17 52 views
0

See my plunkr,角1.0.8。從指令回調,使用更新的對象?

我想使用我的控制器方法中的更新對象(由指令回調激發)。

這是目前的情況: enter image description here

有沒有一種方法來更新的對象以某種方式上工作? (該指令在整個網站上使用,其意圖非常通用)

+0

我的問題包括有效的代碼,怪異的「關閉」的原因...... – apneadiving

回答

2

原因是因爲價值沒有被追蹤。由於AngularJS需要一個對象類型來跟蹤其原型的變化,所以如果希望在摘要循環中監視該值,則不能使用原型類型。

將模型更改爲此,代碼將正常工作。

$scope.preferences = 
    foo: {value: true} 
    bar: {value: true} 
    baz: {value: true} 


    link: (scope)-> 
    scope.clicked = -> 
     scope.model.value = !scope.model.value 
     scope.callback({ value: scope.model }) 

DEMO

+0

有趣的方法,+1 – apneadiving

+0

@apneadiving AngularJS的共同規則是總是使用「引用」,場景背後沒有魔法。 – zsong

+0

@apneadiving我剛剛看到你今天提出的問題,同樣的問題。你應該可以修復它。因爲它與你的問題無關,所以與'$ digest'有關的所有內容都可以忽略。你只需要調用'scope。$ apply'(如果改變了)** OUTSIDE ** AngularJS的範圍。 – zsong

-1

您正在使用隔離範圍,因此該值正在更新,直到稍後在摘要循環中才傳播到父範圍。如果你在上面的例子中點擊'Foo',你可以看到這兩個條都是假的。我不知道你怎麼排隊回調,直到角裝訂的其餘部分,因爲你需要訪問在回調其他範圍元素做,但你可以用$超時(plunkr):

app.directive 'myCheckbox', ($timeout) -> 
... 
    scope.clicked = -> 
    scope.model = !scope.model 
    fn = -> 
     scope.callback({ value: scope.model }) 
    $timeout fn, 1 
+0

請超時是不是一種選擇 – apneadiving