Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 计算特定类型控制器的数量_Angularjs - Fatal编程技术网

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是如何处理它的东西的。