我正在學習angularjs中的一些基礎知識,而且我偶然偶然發現了一種可行的模式,但我不知道爲什麼。也不確定我是否以'角度最佳實踐'的方式進行。這個例子大大簡化了我真正的工作,但一般的概念是相同的:基於父母的開關設置兒童的可見性在這個工作示例中,AngularJS如何知道檢查/觸發'isToggled'條件?
這似乎是我角度天真的自我,它必須以某種方式觀看使用toggledGroups
數組然後???的函數。條件ng-show
確實工作,我只是不明白爲什麼ng-show="isToggled(group)"
得到重新評估,因爲我正在修改的陣列不在$scope
。
做
$scope
GET存在的所有功能,在每個$digest
重新評估?如果是這樣,這對我來說似乎可能會在大數據集上造成ng-repeats
瓶頸。正如我上面提到的那樣,這是一種可以接受的模式,還是有更好/更有角度的方式,我應該考慮這種交互作用?
JS:
var app = angular.module('demo', []);
app.service('TransportationService', function(){
var groups = [{
group: "planes",
items: ["Airbus A300", "Extra 300S", "Stearman"]
}, {
group: "trains",
items: ["Flying Scotsman", "The Rocket", "Silver Streak"]
}, {
group: "automobiles",
items: ["Veyron", "Vanquish", "FF", "Continental GT"]
}];
return {
groups: groups
}
});
app.controller('TransportationController', ['$scope', 'TransportationService', function($scope, ts){
var toggledGroups = [];
function isToggled(group) {
return toggledGroups.indexOf(group) > -1;
}
function toggleGroup(group) {
var index = toggledGroups.indexOf(group);
if (index > -1) {
toggledGroups.splice(index, 1);
} else {
toggledGroups.push(group);
}
}
$scope.groups = ts.groups;
$scope.isToggled = isToggled;
$scope.toggleGroup = toggleGroup;
}]);
HTML:
<div ng-app="demo" ng-controller="TransportationController">
<div ng-repeat="group in groups">
<h3>{{group.group}}</h3>
<button ng-click="toggleGroup(group)">Toggle</button>
<ul ng-show="isToggled(group)">
<li ng-repeat="item in group.items">{{item}}</li>
</ul>
</div>
</div>
小提琴:http://jsfiddle.net/wpHZg/1/
你指的是哪條條件陳述被重新評估? –
'isToggled(group)'。對不起,我措辭不佳 – BLSully
我把一些console.log的isToggled函數,注意到它每次調用它奇怪的6倍... –