An AngularJS factory for simple class based inheritance with support for mixins
- Constructor definition is optional
- Uses
this._super('methodName', arguments)to call super class methods - Supports multiple inheritance by resolving correct
thiscontext insuper()calls - Mixins can be injected and used by adding them to
mixins: [] - Does not override inherited mixins
- Compatible with AngularJS 1.2.x - 1.6.x
- npm
npm i angular-base-class --save- include a reference to node_modules/angular-base-class/angular-base-class.js
- bower
bower install angular-base-class --save- include a reference to bower_components/angular-base-class/angular-base-class.js
- Include angular-base-class.min.js in your project
- Add module
BaseClassas dependency to your AngularJS app
angular.module('App',['BaseClass']).factory('Mammal',['BaseClass',function(BaseClass){returnBaseClass.extend({setAge: function(age){this.age=age;},getAge: function(){returnthis.age;}});}]).factory('Dog',['Mammal',function(Mammal){returnMammal.extend({setAge: function(age){this._super('setAge',age+10);},getAge: function(){return'Dog is '+this._super('getAge')+' years old';}})}]).controller('Ctrl',['$scope','Dog',function($scope,Dog){$scope.dog=newDog({age: 5});$scope.dog.getAge();// Dog is 5 years old$scope.dog.setAge(8);$scope.dog.getAge();// Dog is 18 years old}]);angular.module('App',['BaseClass']).factory('Mammal',['BaseClass',function(BaseClass){returnBaseClass.extend({constructor: function(args){this.age=args.age+1;},setAge: function(age){this.age=age;},getAge: function(){returnthis.age;}});}]).factory('Dog',['Mammal',function(Mammal){returnMammal.extend({constructor: function(){this._super('constructor',arguments);},setAge: function(age){this._super('setAge',age+10);},getAge: function(){return'Dog is '+this._super('getAge')+' years old';},})}]).controller('Ctrl',['$scope','Dog',function($scope,Dog){$scope.dog=newDog({age: 5});$scope.dog.getAge();// Dog is 6 years old$scope.dog.setAge(8);$scope.dog.getAge();// Dog is 18 years old}]);angular.module('App',['BaseClass']).factory('mammalMixin',[function(){return{grow: function(number){this.age+=number;},getName: function(){returnthis.name;}};}]);.factory('Mammal',['BaseClass','mammalMixin',function(BaseClass,mammalMixin){returnBaseClass.extend({constructor: function(args){this.name=args.name;this.age=args.age;},setAge: function(age){this.age=age;},getAge: function(){returnthis.age;},mixins: [mammalMixin]});}]).factory('Cat',['Mammal',function(Mammal){returnMammal.extend({getAgeAndName: function(){return'Age: '+this.getAge()+' Name: '+this.getName();}});}]).controller('Ctrl',['$scope','Cat',function($scope,Cat){$scope.dog=newCat({name: 'Meow',age: 5});$scope.dog.getAge();// 5$scope.dog.setAge(8);$scope.dog.getAge();// 8$scope.dog.getName();// Meow$scope.dog.getAgeAndName();// Age: 8 Name: Meow$scope.dog.grow(2);$scope.dog.getAge();// 10}]);- Get the source code and in project root directory:
npm installnpm run test
- Some ideas were borrowed from the following:
- Axel Rauschmayer - http://www.2ality.com/
- http://backbonejs.org/
Licensed under the MIT license. Copyright (c) 2015 - 2017 Audrius Jakumavicius