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
Post a Comment