我正在构建一个 AngularJS 应用程序(使用 1.2.0 RC1),它使用 REST API 来保存用户输入的数据。用户将输入有关公司的数据,它由我需要保存的两个核心组件组成:
- 公司详情
- 该公司内的联系人
我有 1 个 REST 方法可以调用来保存公司,然后我有另一种方法可以调用来保存每个联系人。
我计划使用它$q
来跟踪所有请求并在完成后解决它们。
我遇到的问题是,虽然 REST API 被成功调用并且我的所有数据都被保存,但当我单击屏幕上的按钮(例如按钮)之前add contact
,当所有承诺都解决时,我的控制器不会收到通知。我已经尝试消除 REST API 作为问题的根源,但是在使用setTimeout
.
这是我的service
模块:
angular.module('myApp', ['restService'])
.factory('service', ['client', '$q', function (client, $q) {
return {
create: function (name, people) {
var deferred = $q.defer();
setTimeout(function () {
console.log('saved company ' + name);
var promises = people.map(function (person) {
var dfd = $q.defer();
setTimeout(function () {
console.dir(person);
console.log('Person saved');
dfd.resolve();
}, 100);
return dfd.promise;
});
$q.all(promises).then(deferred.resolve);
}, 100);
return deferred.promise;
}
};
}]);
这是我的控制器:
angular.module('club', ['myApp'])
.controller('RegisterCtrl', ['$scope', 'service', function ($scope, service) {
$scope.addPerson = function () {
$scope.company.people.push({
firstName: '',
lastName: '',
email: ''
});
};
$scope.removePerson = function (person, index) {
$scope.company.people.splice(index, 1);
};
$scope.save = function (company) {
service.createClub(company.name, company.people).then(function () {
console.log('And we\'re done');
});
};
$scope.company = {
name: '',
people: []
};
}]);
因此,当我调用该save
方法(ng-click
绑定到按钮)时,我将设置一个 console.log,如下所示:
saved company
Object
Person saved
Object
Person saved
注意没有And we're done
输出。一旦我单击绑定到的按钮,我就会得到最终的消息输出addPerson
。ng-click