Angularjs 返回defer.promise未按预期工作
我已经开始做了三天的Angular了,我不能把我的头放在承诺的概念上 我试图创建一个工厂,在两个控制器之间共享JSON数据。这些数据表示一个序列化的SQL数据表 工厂使用$http获取数据Angularjs 返回defer.promise未按预期工作,angularjs,Angularjs,我已经开始做了三天的Angular了,我不能把我的头放在承诺的概念上 我试图创建一个工厂,在两个控制器之间共享JSON数据。这些数据表示一个序列化的SQL数据表 工厂使用$http获取数据 var app = angular.module('myApp', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']); app.factory('Tableau', function ($http, $q) { var obj = {}; obj.ge
var app = angular.module('myApp', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']);
app.factory('Tableau', function ($http, $q) {
var obj = {};
obj.getTable = function (page) {
var temp = {};
var defer = $q.defer();
$http.get('api/Table/' + page).then(function (resolve) {
defer.resolve(resolve.data);
});
return defer.promise;
}
return obj;
});
第一个控制器应将数据显示为HTML表
app.controller("TableController", function ($scope, Tableau) {
$scope.elements = Tableau.getTable(2); // get the first ten rows with row id >= n x 10 (in this case 2 x 10)
});
这是带有ng指令的HTML代码
<tr ng-repeat="t in elements.myarray track by $index">
<td ng-repeat="(k,v) in t track by $index">
<div ng-if="k.indexOf('#')===0">
<span class="label label-default" ng-repeat="vv in v.split(';')">{{vv}}</span><br />
</div>
<div ng-if="k.indexOf('§')===0">
<a href="{{v}}">Lien</a>
</div>
<div ng-if="k.indexOf('#')!=0 && k.indexOf('§')!=0">
{{v}}
</div>
</td>
</tr>
{{vv}}
{{v}
我从控制器调用$http没有问题,但是当我将代码移动到工厂时,$scope.elements包含一个promise对象,而不是预期的JSON对象
我没有实现第二个控制器,它将为表创建分页(使用)
提前感谢。您需要等待承诺完成后才能使用其结果。这意味着使用
。然后()
您还沦为显式承诺构造反模式的牺牲品
为您的工厂简化实施:
app.factory('Tableau', function ($http, $q) {
var obj = {};
obj.getTable = function (page) {
return $http.get('api/Table/' + page)
.then(function (result) {
return result.data;
});
};
return obj;
});
在使用其结果之前,您需要等待承诺完成。这意味着使用。然后()
您还沦为显式承诺构造反模式的牺牲品
为您的工厂简化实施:
app.factory('Tableau', function ($http, $q) {
var obj = {};
obj.getTable = function (page) {
return $http.get('api/Table/' + page)
.then(function (result) {
return result.data;
});
};
return obj;
});
在控制器中:
Tableau.getTable(2)
.then((data) => {
$scope.elements = data
})
在控制器中:
Tableau.getTable(2)
.then((data) => {
$scope.elements = data
})
非常感谢,成功了。不过,我将JLRishe的答案标记为已接受的答案,以获得关于显式承诺构造反模式的额外提示。非常感谢,它成功了。不过,我将JLRishe的答案标记为已接受的答案,以获得关于显式承诺构造反模式的额外提示。非常感谢,特别感谢我不知道的反模式。非常感谢,特别感谢我不知道的反模式。