Instantiate other AngularJS-controller with a CommonController when using IIFE

后端 未结 1 1238
北荒
北荒 2021-01-28 10:21

I have a project where a lot of the models are going to be managed by almost the same controller-code with the only exception that they are calling different services.

T

1条回答
  •  鱼传尺愫
    2021-01-28 10:45

    It looks like your example uses Angular 1.0.x that supports global controllers out of the box. That's how it would be done with more recent Angular, without going too deep into the perils of JS inheritance.

    '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);
    

    and

    {{item}}

    {{item}}

    You may also check Angular Classy, which brings opinionated but viable extending syntax to Angular.

    0 讨论(0)
提交回复
热议问题