2015-06-26 51 views
0

訪問對象的屬性,我嘗試編譯指令,這樣併發送被點擊的指令,該文件(一個複雜的JSON對象)不能內部指令

$scope.displayBlah = function(event, document){ 

    $scope.doc = document; 
    $(event.currentTarget.parentElement).prepend($compile('<show-blah mydata={{doc}}/>')($scope)); 

} 

在指令代碼中,我想訪問該對象上的各個屬性,但只能顯示整個對象,而不能使用點符號來獲取屬性。例如,這顯示了整個複雜的對象

{{mydata}} 

,但我不能在這樣

{{mydata.property}} 

此任indiviual屬性得到的是什麼,我做

myApp.directive('showBlah', function(){ 
return { 
      restrict: 'AE', 
      scope: { 
       mydata: '@' 
       } 
      replace: true, 
      template: <div class='root'>{{mydata}} {{mydata.property}}</div>, 
      link: ///code ommitted 

問題:是有可能像這樣在指令中訪問對象內的屬性?

{{mydata.property}} 
+0

你真的在寫'mydata {{doc}}'嗎?因爲那不會是有效的HTML。 – Thomas

+0

@Thomas沒有那是一個錯字。我會修復OP。謝謝 – BrainLikeADullPencil

+0

順便說一下,這種DOM修改在Angular中很少需要。爲什麼不把''放到模板中呢? – Thomas

回答

1

您使用的@這裏原來傳入的值轉換成字符串:

 scope: { 
      mydata: '@' 
      } 

這就解釋了爲什麼{{mydata}}作品(只顯示一個字符串),但{{mydata.property}}不(字符串沒有那property)。 (在指令調用中省略{{ }})。

+0

中顯示相同'doc'的第二個實例,因此在指令調用中忽略{{}}意味着執行此操作? 'mydata = doc'?如$(event.currentTarget.parentElement).prepend($ compile('show-blah mydata = doc />')($ scope));'? – BrainLikeADullPencil

+0

是的。當你使用'='或'&'進行綁定時,Angular需要一個Angular表達式,而不是一個插入的字符串。另一方面,對於'@',它需要一個可能包含內插部分的字符串(使用'{{}}'')。 – Thomas