javascript - AngularJS generic controller or controller inheritance -


so upon building application have noticed of controllers identical. keep things dry hoping figure out way make generic controller other controllers can inherit from, got little confused of things found. here example of 2 of controllers can see similarities:

.controller('companiescontroller', ['$state', '$filter', 'arrayservice', 'companyservice', 'toastr', 'companies', 'roles', function ($state, $filter, arrayservice, service, toastr, companies, roles) {      // assign variable     var self = this;      // our companies     self.companies = companies;      // our selected companies     self.selected = [];     self.send = {};     self.delete = {};      // create our page sizes array     self.pagesizes = [10, 20, 50, 100];      // filtering , sorting table     self.pagesize = self.pagesizes[0];     self.predicate = 'email';     self.reverse = false     self.filter = '';      // select method     self.select = function (company) {          // modify our array         arrayservice.modify(self.selected, company);          // if our array 1         if (self.selected.length === 1) {              // current selected company             var current = self.selected[0];              // set our variables             self.canhavecenters = (current.role === 'company');             self.requiresconfirmation = (!current.emailconfirmed);              // else         } else {              // reset our variables             self.canhavecenters = false;             self.requiresconfirmation = false;         }     };      // check see if row selected     self.isselected = function (company) {          // if our item in our array, return true         return (arrayservice.indexof(self.selected, company) > -1);     };      // change edit company state     self.edit = function (e, company) {          // change our state         changestate(e, company, 'savecompany.edit');     };      // change company centers state     self.centers = function (e, company) {          // change our state         changestate(e, company, 'savecompany.centers');     };      // deletes company     self.delete = function (e, company) {          // perform delete         recursion(e, company, service.delete, self.delete, '{0} has been deleted.', '{0} companies have been deleted.', true);     };      // private recursion method     var recursion = function (e, company, servicecall, resultobject, singlemessage, multiplemessage, removeafterexecution) {          // stop propagation         e.stoppropagation();          // if have index         if (typeof company !== 'undefined') {              // if our delete succeeded             servicecall(company.id).then(function () {                  // if remove                 if (removeafterexecution) {                      // remove company our array                     self.companies.data.splice(index);                 }                  // display message                 toastr.success($filter('stringformat')(singlemessage, company.email));             });              // otherwise have no index         } else {              // create our counter             var = 0;              // create variable hold our errors             var errors = [];              // each selected company             (i; < self.selected.length; i++) {                  // our index                 var index = self.selected[i];                  // current company                 var company = self.companies.data[index];                  // if have result                 servicecall(company.id).then(function () {                      // if remove                     if (removeafterexecution) {                          // remove company our array                         self.companies.data.splice(index);                     }                      // if there error                 }, function (error) {                      // add our errors array                     errors.push(error);                 });             }              // if have errors             if (errors.length > 0) {                  // set our delete error                 self.error = errors.join();                  // otherwise worked             } else {                  // display message                 toastr.success($filter('stringformat')(multiplemessage, i));             }         }     };      // private state change method     var changestate = function (e, company, state) {          // stop propagation         e.stoppropagation();          // if have index         if (typeof company !== 'undefined') {              // change state             $state.go(state, { companyid: company.id });              // otherwise have no index         } else {              // if have 1 selected item             if (self.selected.length === 1) {                  // our index                 index = self.selected[0];                  // our company                 var company = self.companies.data[index];                  // change state                 $state.go(state, { companyid: company.id });             }         }     } }]); 

and

.controller('usercenterscontroller', ['$stateparams', 'arrayservice', 'centerservice', 'centers', 'usercenters', function ($stateparams, arrayservice, service, centers, usercenters) {      var self = this;      // our user id     var userid = $stateparams.userid;      // assign our centers     self.centers = centers;     self.usercenters = usercenters;      // create our page sizes array     self.pagesizes = [10, 20, 50, 100];      // filtering , sorting table     self.pagesize = self.pagesizes[0];     self.predicate = 'name';     self.reverse = false;     self.filter = '';     self.selected = [];      // create function check if center in array     self.contains = function (center) {          // reference our data         var data = self.usercenters.data;          // if have data         if (data) {              // check see if our center in array             return arrayservice.indexofbykey(data, 'id', center.id) > -1 ? true : false;         }     };      // adds current center user     self.add = function (e, center) {          // stop propagation         modify(e, center, true);     };      // removes current center user     self.remove = function (e, center) {          // stop propagation         modify(e, center, false);     };      // select method     self.select = function (center) {          // modify our array         arrayservice.modify(self.selected, center);          // assign our variables         self.canadd = searcharray(self.usercenters.data, self.selected, false);         self.canremove = searcharray(self.usercenters.data, self.selected, true);     };      // check see if row selected     self.isselected = function (center) {          // if our item in our array, return true         return (arrayservice.indexof(self.selected, center) > -1);     };      // private method checking if selected items of same state     var searcharray = function (arraytocheck, arraytocompare, contains) {          // loop through items check         (var = 0; < arraytocompare.length; i++) {              // our current item             var item = arraytocompare[i];              // see if our current id exis             var found = arrayservice.indexofbykey(arraytocheck, 'id', item.id) > -1;              if (found != contains)                 return false;         }          return true;     };      // private method handling adding / removing or user centers     var modify = function (e, center, adding) {          // stop propagation         e.stoppropagation();          // if have index         if (typeof center !== 'undefined') {              // create list             var list = [];              // push our center list             list.push(center);              // make our call             service.modifyusercenters(list, userid, adding).then(function () {}, function (error) {                  // display our error                 self.error = error;             });              // push our user centers if it's not there             arrayservice.modify(self.usercenters.data, center);         }     }; }]); 

now there obvious differences, @ same time there lot of similarities. not javasript guru, things prototypical inheritance don't mean me.

i saw question else asked:

creating generic angularjs listcontroller

and seems similar want, stumbled upon these 2 methods:

https://www.exratione.com/2013/10/two-approaches-to-angularjs-controller-inheritance/

and started getting confused. case can see, have similar methods calls , have shared variables , functions. have 5 controllers similar in design , can see if solve this, have few more creating / editing controllers too.

can give me, laymen, helping hand?


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -