我有一个编码风格的问题。给定以下代码,该代码使用http服务检索数据,然后使用控制器执行该服务/工厂。似乎在控制器的末尾调用函数makePromise()并不是“正确”的做法。它可以工作,但是有没有更好的方法来执行这段代码呢?也许是最好的实践?我只是无法想象,例如,在controller...just的末尾执行10个左右的语句似乎是不正确的。我只是在寻找一个更优雅的解决方案。
var app = angular.module('app', []);
app.factory('DataService', function($http, $q) {
return {
getData: function() {
return $http.get('http://ergast.com/api/f1/2013/driverStandings.json')
.then(function(response) {
if (typeof response.data == 'object') {
return response.data;
} else {
return $q.reject(response.data);
}
}, function(response) {
return $q.reject(response.data);
})
}
}
});
app.controller('MainCtrl', function($scope, DataService) {
$scope.driversList = [];
var makePromise = function() {
DataService.getData()
.then(function(data) {
//console.log(data.MRData.StandingsTable.StandingsLists[0].DriverStandings)
$scope.driversList = data.MRData.StandingsTable.StandingsLists[0].DriverStandings;
}, function(error) {
console.log('error')
})
}
//THIS IS MY CONCERN HERE...
makePromise();
})发布于 2015-10-17 01:57:17
您不必将其包装在函数中。很多时候,我的代码看起来像这样。
DataService.getData()
.then(function(data) {
//console.log(data.MRData.StandingsTable.StandingsLists[0].DriverStandings)
$scope.driversList = data.MRData.StandingsTable.StandingsLists[0].DriverStandings;
}, function(error) {
console.log('error')
})有两种选择,第一种是在html中使用ng-init="loadStuff()“。更干净的解决方案可能是在UI-Router中使用Resolve。因此,您在路由上加载数据会发生变化,并且可能会在进行GET时显示一个加载器。
发布于 2015-10-17 02:17:32
这是一个很好的问题!我找到的最好的方法是下面的函数:
(function () { // init
// initialize values on your scope
})();指令ng-init不建议使用它来加载控制器。
“应该使用控制器而不是ngInit来初始化作用域上的值。”https://docs.angularjs.org/api/ng/directive/ngInit
https://stackoverflow.com/questions/33176566
复制相似问题