使用IIFE时,使用CommonController实例化其他AngularJS控制器

时间:2015-07-14 07:58:37

标签: angularjs

我有一个项目,其中许多模型将由几乎相同的控制器代码管理,唯一的例外是他们调用不同的服务。

我现在正在处理的方法是将具有公共代码的Crud-Controller实例化到每个自定义控制器中,然后通过更改自定义控制器内的变量来重定向服务调用。即 通过在自定义控制器中设置vm.service.get(),Crud-Controller内的vm.service = teamService;会发生变化。

这就是我现在将Crud-Controller实例化到我的自定义控制器中的方法:

$injector.invoke(Crud, this, {$scope:$scope});

这很好用,但我不知道这是否是分享通用控制器代码的正确方法。也许有可能为此用途实例化服务?因为我的问题(如果我的方式是正确的),如何在使用IIFE时访问其他控制器?现在我没有使用IIFE,因为我还没有想出办法。

我尝试使用angular.module('app').controller('Crud'),但它不起作用。

即:如何在不使用$ injector或依赖$ scope继承的情况下访问PrimaryCtrl的编辑功能? http://jsfiddle.net/tcVhN/62/

1 个答案:

答案 0 :(得分:0)

看起来您的示例使用支持开箱即用的全局控制器的Angular 1.0.x. That's how it would be done有更新的Angular,没有深入探讨JS继承的危险。

'use strict';

(function (root, angular) {
    root.ctrls = root.ctrls || {};

    var primaryCtrl = function ($scope) {
        var self = this;
        console.log('primaryCtrl constructor', self, $scope);
    };
    primaryCtrl.prototype = {
        items: ['Item 1', 'Item 2'],
        edit: function (item) {
            //do stuff
        }
    };
    primaryCtrl.$inject = ['$scope'];

    root.ctrls.primaryCtrl = primaryCtrl;
})(this, angular);

(function (root, angular) {
    root.ctrls = root.ctrls || {};

    var secondaryCtrl = function ($scope) {
        var self = this;
        console.log('secondaryCtrl constructor', self, $scope);
    };
    secondaryCtrl.prototype = angular.extend({},
        root.ctrls.primaryCtrl.prototype,
        {
            items: ['Stuff 1', 'Stuff 2']
        }
    );
    secondaryCtrl.$inject = ['$scope'];

    root.ctrls.secondaryCtrl = secondaryCtrl;
})(this, angular);

var app = angular.module('app',[]);
app.controller('PrimaryCtrl', ctrls.primaryCtrl);
app.controller('SecondaryCtrl', ctrls.secondaryCtrl);

<div ng-controller="PrimaryCtrl as primary">
    <p ng-repeat="item in primary.items">{{item}}</p>
</div>

<div ng-controller="SecondaryCtrl as secondary">
    <p ng-repeat="item in secondary.items">{{item}}</p>
</div>

您也可以查看Angular Classy,这会为Angular带来自以为是但可行extending syntax