我實現主複選框(在表頭),並進入複選框(在表中的行)的行爲,這是我的html:複選框行爲,在指令或控制器?
<div class="container main" ng-controller="ParamCtrl as param">
.
.
.
<form>
<thead>
<input type="checkbox" ng-model="param.masterCheckBox" ng-click="param.clickMaster()" />
</thead>
<tbody>
<tr ng-repeat="entry in param.entries track by $index">
<input type="checkbox" ng-model="parameter.checked" ng-click="param.click($index)" />
</tr>
</tbody>
</form>
</div>
主複選框和行復選框的行爲控制器內部實現(而不是控制器在指令中)。這是我的js文件(因爲這是工作,我刪除的功能內部的邏輯的話):
app.controller('ParamCtrl', function() {
this.function1 = function() {...};
this.function2 = function() {...};
.
.
.
this.clickMaster = function(){...};
this.click = function(index){...};
});
我讀過很多次,控制器內DOM操作是不可取的,而應該是一個僞指令中。我還沒有完全理解AngularJS中的指令概念。我不確定複選框的行爲是否屬於DOM,請確認是否將它放在控制器中是正確的。我如何實現clickMaster的指令版本,並在控制器中放置這些控件是錯誤的(或不好的做法)時點擊函數?
app.controller('ParamCtrl',function(){...})使用這個工作得很好。但是,每當我改變與
app.controller('ParamCtrl', ['$scope', function($scope) {...}])
或
app.controller('ParamCtrl', function($scope) {...}])
控制器與$範圍源代碼替換的這所有情況下,代碼不工作了。在我的Chrome開發工具調試中,$ scope(在兩種情況下都有變化)對ChildScope有價值。在我見過的代碼示例中,他們通常會使用$ scope而不是這個。有人可以解釋爲什麼它與這個而不是$範圍?
謝謝。
控制器內的代碼有點冗長和混亂。是否也可以將此複選框的行爲放入注入到控制器的工廠(或服務)中以便做一些重構?即使這是可能的,這是一個很好的做法嗎? – menorah84 2014-10-07 12:06:15