Angularjs 计算特定类型控制器的数量
我想知道存在多少个特定类型的控制器(我不是说Angularjs 计算特定类型控制器的数量,angularjs,Angularjs,我想知道存在多少个特定类型的控制器(我不是说已初始化,我是说存在) 我想这应该很容易,我错过了一些东西 例如: <body ng-app="waitfor"> <div ng-controller="oneof"> {{cindex}} {{last}} </div> <div ng-controller="oneof"> {{cindex}} {{last}} </div
已初始化
,我是说存在
)我想这应该很容易,我错过了一些东西 例如:
<body ng-app="waitfor">
<div ng-controller="oneof">
{{cindex}} {{last}}
</div>
<div ng-controller="oneof">
{{cindex}} {{last}}
</div>
<div ng-controller="oneof">
{{cindex}} {{last}}
</div>
</body>
{{cindex}{{last}
{{cindex}{{last}
{{cindex}{{last}
我想知道有3个控制器存在,因此当最后一个控制器初始化时,我可以相应地执行操作。您需要什么:
跟踪现有控制器并公开用于注册/注销控制器实例的方法的服务
一种控制器,使用该服务在实例化时注册自身,并在销毁后注销自身
示例实施:
1。)服务:
.factory('OneOfManyManager', function () {
/* Internal list of existing controller
* (i.e. instantated and not destroyed) */
var ctrls = [];
/* Returns the current count of existing controllers */
function getCount() {
return ctrls.length;
}
/* Registers a controller instance and returns its index
* (NOTE: With this implementation, indices are not necessarily unique) */
function register(ctrl) {
var idx = ctrls.length;
ctrls.push(ctrl);
return idx;
}
/* Unregisters a controller (if already registered)
* Return true upon successful unregistration of false otherwise */
function unregister(ctrl) {
var idx = ctrls.indexOf(ctrl);
ctrls.splice(idx, 1);
return idx !== -1;
}
/* The returned service object */
return {
getCount: getCount,
register: register,
unregister: unregister
};
});
2。)控制器:
.controller('oneOfManyCtrl', function ($scope, OneOfManyManager) {
var thisCtrl = this;
/* Register the controller upon instantition */
$scope.index = OneOfManyManager.register(thisCtrl);
$scope.getCount = OneOfManyManager.getCount;
/* Unregister the controller once upon destruction */
$scope.$on('$destroy', function (evt) {
var success = OneOfManyManager.unregister(thisCtrl);
if (success) {
console.log('Successfully unregistered controller:', thisCtrl);
console.log('Controllers left: ' + OneOfManyManager.getCount());
} else {
console.warn('WARNING: The controller wasn\'t registered !', thisCtrl);
}
});
});
另请参见此何时需要反复使用同一控制器?你可以用很多方法做到这一点。但这不应该是控制者的责任,当然也不应该是控制者的责任。场景是每个控制器向一个服务注册,每次注册时都需要进行某种计算。我想推迟计算,直到所有控制器都完成。我想服务可以确定它们何时完成,但我不知道如何完成。@Ben:你试过我的解决方案吗?这对你有用吗?@ExpertSystem刚刚注意到了答案。我读过了,您实际上给出了一个方法来确定实例化了多少控制器(因为您在实例化时注册),我正在寻找一个方法来确定总共存在多少控制器(换句话说,在实例化之前(在服务中)有多少个元素有ng controller=“oneof”
).看到区别了吗?@Ben:我的方法记录了当前“活动”实例的数量(例如实例化的和未销毁的(如在元素删除中))。我真的不明白你想统计什么。你说的元素带有ng controller=“oneof”
。但是您应该在哪里查找这些元素?在整个代码库中?一个HTML文件?加载的部分(例如使用ngView
,ngInclude
,指令模板)如何?从DOM中删除的元素如何(例如使用ngIf
)我想你在这里走的是很薄的冰。确保你完全理解Angular是如何处理它的东西的。