2014-11-25 30 views
0

在我的應用程序中,我有一個ng-repeat,它遍歷JSON並將每個對象打印到頁面上。因此,例如,我的ng-repeat打印動物如何將對象引用傳遞給指令?

[ 
       { 
        name: "horse", 
        sound: "Nay", 
        legs: 4, 
       }, 
       { 
        name: "beaver", 
        sound: "thwack", 
        legs: 2 
       } 
] 

我也希望每個動物傳遞給一個指令,並可能增加一些關鍵的,價值給他們。問題是,當我添加了動物對象的屬性,並在指令更新,

<animal this-animal={{animal}}></animal> 

,並在指令鏈接功能

var animalObj = scope.$eval(attrs.thisAnimal); 
animalObj["gestation"] = 10; 

它不更新在原來的JSON中。這就像它從所有動物的整體陣列中斷開。

爲什麼?我如何將它們放在一起?我想更新個別對象以在主JSON對象中進行更改。

回答

1

通過在HTML中使用{{model}},它將解析該值並將其放置到HTML中。在你的情況下,JSON被串化,然後轉換回來,從而製作一個克隆的對象。而不是使用{{model}}傳遞值的名稱。

<div my-directive="model"> 

然後使用$解析

module.directive('myDirective', function($parse) { 
    return { 
     link: function(scope, element, attrs) { 
      var val = $parse(attrs.my directive)(scope); 
     } 
    }; 
}); 
1

可以使用隔離範圍訪問模型值。假設動物的陣列父控制器的作用域屬性,你可以這樣做:

<div ng-repeat="animal in animals"> 
    <animal this-animal="animal"></animal> 
</div> 

而在指令代碼:

module.directive('myDirective', function() { 
    return { 

     scope: { 
      thisAnimal: "=" 
     }, 

     link: function(scope, element, attrs) { 
      scope.thisAnimal.gestation = 10; 
     } 
    }; 
}); 

轉寄此頁的更多詳細信息,分離範圍節:

https://docs.angularjs.org/guide/directive

+0

這是比使用'$ parse'更好?這不意味着我將無法使用控制器範圍內的變量嗎? – CodyBugstein 2014-11-25 11:47:43

+0

是的,這意味着來自控制器作用域的變量不能直接使用。但是對於控制器所需的所有變量,您可以同樣創建一個隔離範圍綁定。 – arghya 2014-11-25 13:35:52

+0

你能解釋一下,還是指向我可以看到如何將控制器的東西綁定到我的指令的地方? – CodyBugstein 2014-11-25 20:27:03

相關問題