我正在尝试制作一个通用代码,以简单的方式实现下一个级别的目的。请找到我制作的注释代码。但是,它不起作用。
var app = angular.module('myApp', []);
app.factory('mainFactory',function($http){
return {
getData: function() {
return $http.get("data.json");
}
};
});
app.controller('mainCtrl', function($scope,$http,mainFactory){
var data = mainFactory.getData();
if(angular.isDefined(data)) {
data.success(function(d,s){
// I want this commented out code for the four lines defined below.
/*var a = [{name:"imagesArray"},{name:"taskArray"},{name:"courseArray"},{name:"newsArray"}];
for(var i = 0; i < a.length; i++) {
$scope.a[i].name = d.a[i].name ? d.a[i].name : [];
}*/
// I dont want this number of lines.
$scope.imagesArray = d.imagesArray ? d.imagesArray : [];
$scope.taskArray = d.taskArray ? d.taskArray : [];
$scope.courseArray = d.courseArray ? d.courseArray : [];
$scope.newsArray = d.newsArray ? d.newsArray : [];
});
}
});
如果可以进一步简化,请告诉我
最佳答案
您可以使用它来更好地定义范围属性,编辑您的代码如下:
data.success(function(d,s){
var keyCollection = ["imagesArray","taskArray","courseArray","newsArray"];
keyCollection.forEach(function(key){
$scope[key] = d[key];
});
});
<小时/>
或者如果你的项目也在使用lodash(或下划线)。你可以简单地这样做(进一步,不要仅仅因为这个就导入lodash或下划线,不需要成本):
// outside, create advance function
var advancePick = _.partialRight(_.pick, "imagesArray", "taskArray", "courseArray", "newsArray");
data.success(function(d,s){
// just beauty like this
_.extend($scope, advancePick(d));
});
关于javascript - 使用数组制作 Angular JS 的通用代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35220183/