當我將控制器中與DOM有關的代碼移動到指令時,我有一個ng類初始化問題。 短,這裏是一些代碼:ng-repeat中的angularjs:指令和ng類初始化
view.html
<div ng-repeat="foo in foos" ng-click="rowClick($index)>
<div ng-class="changeOpacity($index)>
<span>{{foo.title}}</span>
<span>{{foo.name}}</span>
<span>{{foo.date}}</span>
...
// some div with hidden content. Show when clicking on the div
</div>
<div>
controller.js
$scope.rowClick = function (idx) {
// unfold the clicked div to show content
};
$scope.changeOpacity = function (idx) {
if (this is the div clicked) {
return {dark: true};
} else {
return {light: true};
}
所以當我有DIV的列表。當我點擊一個div時,除了這個之外,其他所有div都會變暗。
當$ scope.rowClick和$ scope.changeOpacity在我的控制器中時,一切正常。
當我移動rowClick和changeOpcaity的指令:
myBar.js
myApp.directive('myBar', function() {
...
return {
restrict:'A',
link: function (scope, element) {
element.bind('click', function() {
...
same code from rowClick
...
scope.changeOpacity = function() {
...
same code from changeOpacity
}
scope.$apply();
}
}),
changeOpacity: function() {
...
return {light: true} // for all divs
}
}
});
現在我view.html是類似的東西:
<div ng-repeat="foo in foos" ng-click="rowClick($index) my-bar>
<div ng-class="changeOpacity($index)>
<span>{{foo.title}}</span>
<span>{{foo.name}}</span>
<span>{{foo.date}}</span>
...
// some div with hidden content. Show when clicking on the div
</div>
<div>
但現在divs不會再用ng-class進行初始化了。我必須在每個div上單擊一次來初始化它,並使用監聽點擊的鏈接功能。
如何在指令內初始化ng-class?
Thanx。
肯定這一塊做的另一種方法。很容易嘗試和jQuery的一切,但在角度上,你應該只改變你的**模型**,讓角度改變你的UI。我可能提供的代碼中的一個改進是ng-click應該在範圍上調用一個方法,並將'foo'作爲參數,以便除了所點擊的那個之外,還可以使所有其他'foos'變暗。 – Hylianpuffball