如何按工厂分配angularjs的值
首先我有这样的工厂:如何按工厂分配angularjs的值,angularjs,angularjs-factory,Angularjs,Angularjs Factory,首先我有这样的工厂: app.factory('getApiUrl', function (httpq, $q) { var obj = {}; obj.getResponse = function (hurl) { var promise = $q.defer(); httpq.get(hurl).then(function (data) { //obj = data.data; promise
app.factory('getApiUrl', function (httpq, $q) {
var obj = {};
obj.getResponse = function (hurl) {
var promise = $q.defer();
httpq.get(hurl).then(function (data) {
//obj = data.data;
promise.resolve(data.data);
})
return promise.promise;
}
return obj;
});
app.controller('mainController', function ($scope, httpq, $q, getApiUrl) {
$scope.message = "Main Content";
var namees = new Array();
var testc = getApiUrl.getResponse(hurl);
$scope.names = testc.data;
});
然后我创建控制器并调用工厂,如下所示:
app.factory('getApiUrl', function (httpq, $q) {
var obj = {};
obj.getResponse = function (hurl) {
var promise = $q.defer();
httpq.get(hurl).then(function (data) {
//obj = data.data;
promise.resolve(data.data);
})
return promise.promise;
}
return obj;
});
app.controller('mainController', function ($scope, httpq, $q, getApiUrl) {
$scope.message = "Main Content";
var namees = new Array();
var testc = getApiUrl.getResponse(hurl);
$scope.names = testc.data;
});
但它不起作用。
getResponse
方法返回。您需要在响应得到解决时提供回调。正确的用法是:
app.controller('mainController', function ($scope, httpq, $q, getApiUrl) {
$scope.message = "Main Content";
var namees = new Array();
getApiUrl.getResponse(hurl).then(function(data) {
var testc = data;
$scope.names = testc.data;
});
});
作为旁注,您还应该去掉服务中的冗余$q.defer
,因为httpq.get(hull)
已经是一个承诺:
obj.getResponse = function (hurl) {
return httpq.get(hurl).then(function (data) {
return data.data;
});
}
它不起作用,我只是试试这个。
hurl
没有定义。您还使用了承诺反模式:即使有错误,您返回的承诺也不会被拒绝。函数体应该是returnhttpq.get(hull).then(function(response){returnresponse.data;})代码>。阅读它的工作原理,但为什么不能像一些var testc=getapirl.getResponse(hurl)那样使用它;因为我在angularjs中看到一些sourcode使用类似的方式,例如,因为您正在发出AJAX请求,这是一个异步操作。代码只是不“等待”直到响应加载并简单地返回“未定义”。因此,您需要使用回调或承诺。查看更多详细信息。我只是尝试:obj.getResponse=function(hull){return httpq.get(hull)。然后(function(data){return data.data;});}@chinguyen您发布的示例使用angular 1.0.1,它用于支持在视图表达式中使用承诺。很长一段时间都不是这样了。1.0.1为3,5岁。我们现在是1.4.8。好吧,我犯了个错误,因为我刚刚阅读并研究了有关angular的内容,谢谢。