我正在学习angularjs,而且我正在努力从这家工厂获得我想要的结果:
create_logger
答案 0 :(得分:0)
app.factory('foreCast', ['$q', '$http', function ($q, $http) {
return {
getRand: function () {
var deferred = $q.defer();
$http
.jsonp("https://www.kimonolabs.com/api/c1ab8xnw?&apikey=api-key&callback=JSON_CALLBACK")
.then(function (response) {
var rows = response.data.results.collection1;
var rand = rows[Math.floor(Math.random() * rows.length)];
deferred.resolve(rand);
}, function (err) {
deferred.reject(err);
})
return deferred.promise;
}
}
}])
然后从控制器例如使用它:
foreCast.getRand().then(function(rand){
var myRand = rand;
})
答案 1 :(得分:0)
首先,您永远不想将成功处理程序与http一起使用。我相信它实际上已被弃用了。最佳做法是使用.then和.catch进行错误。其次,大部分时间你应该在控制器中处理结果,因为服务不应该知道如何处理数据。
所以说,我们可以稍微减少你的工厂。
app.factory('foreCast', ['$http', function($http,$scope ) {
var factory = {};
factory.rand = function() {
return $http.jsonp("https://www.kimonolabs.com/api/c1ab8xnw?&apikey=api-key&callback=JSON_CALLBACK");
};
return factory;
}]);
现在在您的控制器中:
app.controller('controller', ['foreCast', function(foreCast) {
var self = this;
foreCast.rand().then(function(response) {
var rows = response.results.collection1;
self.rand = rows[Math.floor(Math.random() * rows.length)];
});
}]);
现在在您的视图中,只需使用rand访问此值。
<div ng-bind="ctrl.rand"></div>