Javascript lf.selected=[]; //创建一个函数以检查中心是否在阵列中 self.contains=函数(中心){ //参考我们的数据 var data=self.userCenters.data; //如果我们有任何数据 如果(数据){ //检查我们的中心是否在阵列中 返回arrayService.indexOfByKey(数据'id',center.id)>-1?true:false; } }; //将当前中心添加到用户 self.add=函数(e,中心){ //停止传播 修改(e,居中,真); }; //从用户中删除当前中心 self.remove=功能(e,中心){ //停止传播 修改(e,居中,假); }; //选择方法 self.select=功能(中心){ //修改我们的数组 arrayService.modify(自选,居中); //分配我们的变量 self.canAdd=searchArray(self.userCenters.data,self.selected,false); self.canRemove=searchArray(self.userCenters.data,self.selected,true); }; //检查是否选中了该行 self.isSelected=功能(中心){ //如果项目在数组中,则返回true 返回(arrayService.indexOf(自选,居中)>-1); }; //用于检查所选项目是否都处于相同状态的专用方法 var searchArray=函数(arrayToCheck、arrayToCompare、contains){ //循环检查要检查的项目 对于(变量i=0;i-1; 如果(找到!=包含) 返回false; } 返回true; }; //处理添加/删除或用户中心的专用方法 var modify=功能(e、中心、添加){ //停止传播 e、 停止传播(); //如果我们有索引 如果(中心类型!==“未定义”){ //创建一个列表 var列表=[]; //把我们的中心列入名单 列表。推送(中间); //打电话 modifyUserCenters(list,userId,adding).then(function(){},function(error){ //显示我们的错误 self.error=错误; }); //如果我们的用户中心还没有,就推到用户中心 arrayService.modify(self.userCenters.data,center); } }; }]);
现在有明显的区别,但同时也有很多相似之处。由于我不是JavaSript大师,像原型继承这样的事情对我来说并没有任何意义 我看到有人问我这个问题: 这似乎与我想要的相似,但后来我偶然发现了以下两种方法: 这就是我开始感到困惑的地方。 在我的例子中,您可以看到,我可能会有类似的方法调用,并且会有一些共享的变量和函数。我有大约5个在设计上相似的控制器,我可以看到,如果我解决了这个问题,那么我也将有一些用于创建/编辑控制器 谁能给我一个外行,一个帮手Javascript lf.selected=[]; //创建一个函数以检查中心是否在阵列中 self.contains=函数(中心){ //参考我们的数据 var data=self.userCenters.data; //如果我们有任何数据 如果(数据){ //检查我们的中心是否在阵列中 返回arrayService.indexOfByKey(数据'id',center.id)>-1?true:false; } }; //将当前中心添加到用户 self.add=函数(e,中心){ //停止传播 修改(e,居中,真); }; //从用户中删除当前中心 self.remove=功能(e,中心){ //停止传播 修改(e,居中,假); }; //选择方法 self.select=功能(中心){ //修改我们的数组 arrayService.modify(自选,居中); //分配我们的变量 self.canAdd=searchArray(self.userCenters.data,self.selected,false); self.canRemove=searchArray(self.userCenters.data,self.selected,true); }; //检查是否选中了该行 self.isSelected=功能(中心){ //如果项目在数组中,则返回true 返回(arrayService.indexOf(自选,居中)>-1); }; //用于检查所选项目是否都处于相同状态的专用方法 var searchArray=函数(arrayToCheck、arrayToCompare、contains){ //循环检查要检查的项目 对于(变量i=0;i-1; 如果(找到!=包含) 返回false; } 返回true; }; //处理添加/删除或用户中心的专用方法 var modify=功能(e、中心、添加){ //停止传播 e、 停止传播(); //如果我们有索引 如果(中心类型!==“未定义”){ //创建一个列表 var列表=[]; //把我们的中心列入名单 列表。推送(中间); //打电话 modifyUserCenters(list,userId,adding).then(function(){},function(error){ //显示我们的错误 self.error=错误; }); //如果我们的用户中心还没有,就推到用户中心 arrayService.modify(self.userCenters.data,center); } }; }]);,javascript,angularjs,inheritance,Javascript,Angularjs,Inheritance,现在有明显的区别,但同时也有很多相似之处。由于我不是JavaSript大师,像原型继承这样的事情对我来说并没有任何意义 我看到有人问我这个问题: 这似乎与我想要的相似,但后来我偶然发现了以下两种方法: 这就是我开始感到困惑的地方。 在我的例子中,您可以看到,我可能会有类似的方法调用,并且会有一些共享的变量和函数。我有大约5个在设计上相似的控制器,我可以看到,如果我解决了这个问题,那么我也将有一些用于创建/编辑控制器 谁能给我一个外行,一个帮手 .controller('CompaniesCo
.controller('CompaniesController', ['$state', '$filter', 'ArrayService', 'CompanyService', 'toastr', 'companies', 'roles', function ($state, $filter, arrayService, service, toastr, companies, roles) {
// Assign this to a variable
var self = this;
// Get 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];
// For filtering and sorting the 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 is only 1
if (self.selected.length === 1) {
// Get the 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 to see if the row is selected
self.isSelected = function (company) {
// If our item is in our array, return true
return (arrayService.indexOf(self.selected, company) > -1);
};
// Change to the edit company state
self.edit = function (e, company) {
// Change our state
changeState(e, company, 'saveCompany.edit');
};
// Change to the company centers state
self.centers = function (e, company) {
// Change our state
changeState(e, company, 'saveCompany.centers');
};
// Deletes a company
self.delete = function (e, company) {
// Perform the 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 we have an index
if (typeof company !== 'undefined') {
// If our delete succeeded
serviceCall(company.id).then(function () {
// If we are to remove
if (removeAfterExecution) {
// Remove the company from our array
self.companies.data.splice(index);
}
// Display a message
toastr.success($filter('stringFormat')(singleMessage, company.email));
});
// Otherwise we have no index
} else {
// Create our counter
var i = 0;
// Create a variable to hold our errors
var errors = [];
// For each selected company
for (i; i < self.selected.length; i++) {
// Get our index
var index = self.selected[i];
// Get the current company
var company = self.companies.data[index];
// If we have a result
serviceCall(company.id).then(function () {
// If we are to remove
if (removeAfterExecution) {
// Remove the company from our array
self.companies.data.splice(index);
}
// If there is an error
}, function (error) {
// Add to our errors array
errors.push(error);
});
}
// If we have some errors
if (errors.length > 0) {
// Set our delete error
self.error = errors.join();
// Otherwise everything worked
} else {
// Display a message
toastr.success($filter('stringFormat')(multipleMessage, i));
}
}
};
// Private state change method
var changeState = function (e, company, state) {
// Stop propagation
e.stopPropagation();
// If we have an index
if (typeof company !== 'undefined') {
// Change state
$state.go(state, { companyId: company.id });
// Otherwise we have no index
} else {
// If we have 1 selected item
if (self.selected.length === 1) {
// Get our index
index = self.selected[0];
// Get our company
var company = self.companies.data[index];
// Change state
$state.go(state, { companyId: company.id });
}
}
}
}]);
.controller('UserCentersController', ['$stateParams', 'ArrayService', 'CenterService', 'centers', 'userCenters', function ($stateParams, arrayService, service, centers, userCenters) {
var self = this;
// Get 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];
// For filtering and sorting the table
self.pageSize = self.pageSizes[0];
self.predicate = 'name';
self.reverse = false;
self.filter = '';
self.selected = [];
// Create a function to check if a center is in an array
self.contains = function (center) {
// Reference our data
var data = self.userCenters.data;
// If we have any data
if (data) {
// Check to see if our center is in the array
return arrayService.indexOfByKey(data, 'id', center.id) > -1 ? true : false;
}
};
// Adds the current center to the user
self.add = function (e, center) {
// Stop propagation
modify(e, center, true);
};
// Removes the current center from the 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 to see if the row is selected
self.isSelected = function (center) {
// If our item is in our array, return true
return (arrayService.indexOf(self.selected, center) > -1);
};
// Private method for checking if the selected items are all of the same state
var searchArray = function (arrayToCheck, arrayToCompare, contains) {
// Loop through the items to check
for (var i = 0; i < arrayToCompare.length; i++) {
// Get 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 for handling adding / removing or user centers
var modify = function (e, center, adding) {
// Stop propagation
e.stopPropagation();
// If we have an index
if (typeof center !== 'undefined') {
// Create a list
var list = [];
// Push our center into the list
list.push(center);
// Make our call
service.modifyUserCenters(list, userId, adding).then(function () {}, function (error) {
// Display our error
self.error = error;
});
// Push to our user centers if it's not already there
arrayService.modify(self.userCenters.data, center);
}
};
}]);