2014-11-04 28 views
0

假設我有一個範圍,顯示左側的用戶列表以及右側當前選定用戶的詳細信息。Angular Directives - 知道綁定到屬性的對象何時發生更改

我創建了一個用戶的細節元素的指令有兩個雙向綁定,並用指令的對象,看起來像這樣結束:

{ 
    restrict: 'E', 
    scope: { 
    user: "=" 
    }, 
    templateUrl: '...', 
    controller: function() { ...elided...} 
} 

在父HTML,我用此指令:

<user-details user="currentUser"></user-details> 

隨着用戶選擇在左側改變,currentUser屬性被更新,這導致指令中的用戶屬性指向不同的對象。角手柄重新呈現在用戶細節的HTML指令很好,但

(這裏的問題)

假設我有工作的一些小一點的,我需要的時候顯示的用戶是做改變了,可能是一個應該被解析成對象的JSON字符串。

我如何知道綁定對象已更改(並且我需要重新解析)?

我曾嘗試:

  • 看$ scope.user
  • 觀察$ ATTR, '用戶'

控制器和鏈接功能似乎只被調用一次。

某處我必須錯過一些東西。這看起來並不像它應該離那條路很遠。

+1

如果你能具體談談這個問題會更容易幫助,但最好的解決方案最有可能涉及更多的數據綁定。 – 2014-11-04 16:01:22

回答

1

您應該使用鏈接,然後看user這樣的:

{ 
    restrict: 'E', 
    scope: { 
    user: "=" 
    }, 
    templateUrl: '...', 
    link: function(scope) { 
    scope.$watch('user',function(value){ 
     // Do your stuff here 
    }); 
    } 
} 

你可以看用戶與功能,以及:

scope.$watch(function(){ 
    retrun scope.user; 
}, function(value){ 
    // Do your stuff here 
}); 

但那就只能消化進行更新。您可以檢查documentation或搜索angularjs digest循環

編輯:

我忘了scope說法,因爲我只是複製粘貼。

+0

格式化有點搞砸了,但那是我嘗試過的一件事情。這是行不通的。 – 2014-11-04 16:09:39

+0

你是否將範圍作爲參數添加到鏈接函數中? – 2014-11-04 16:12:38

+0

_但那麼它只會在摘要上更新_ - 你是什麼意思?這兩個版本在功能上是等效的。 – zeroflagL 2014-11-04 16:23:50

1

您可以用true調用$apply在鏈接功能作爲第三個參數是這樣

scope.$watch('user', function(newValue, oldValue) { 
    console.log(newValue, oldValue); 
}, true); 

這改變了「objectEquality」,使用戶對象將平等,而不是爲基準進行比較。

也可以單獨看你的用戶屬性是這樣的:

// suppose there is an user with age and gender properties: 

scope.$watch('user.age', function(newValue, oldValue) { 
    console.log(newValue, oldValue); 
}); 

scope.$watch('user.gender', function(newValue, oldValue) { 
    console.log(newValue, oldValue); 
}); 

// more properties to watch for ... 
+0

對我來說,關鍵是看名字的財產。感謝您的幫助。 – 2014-11-04 17:40:49

相關問題