AngularJS-我怎么知道何时解决了对父控制器的承诺
AngularJS - How can I know when a promise on a parent controller has been resolved?
我有一个指令,它依赖于其父控制器的数据。此数据以承诺的形式返回。我如何知道存在于父控制器上的承诺何时得到解决?
父控制器
angular.module("UserShoes").controller("UserController", function ($scope) {
$scope.user = User.get({
userId: 1
});
$scope.shoes = [];
$scope.user.$promise.then(function (data) {
data.shoes.forEach(function (shoe, index) {
if (shoe) {
$scope.shoes.push(shoe);
}
});
});
});
指令
angular.module("UserShoes").directive("Shoes", ["", function () {
return {
...
controller: function ($scope) {
// When will $scope.parent.shoes be ready? :-(
}
...
}
}]);
您可以广播一个事件并在指令中侦听该事件。
来自您的上级控制器:
angular.module("UserShoes").controller("UserController", function ($scope) {
$scope.user = User.get({
userId: 1
});
$scope.shoes = [];
$scope.user.$promise.then(function (data) {
data.shoes.forEach(function (shoe, index) {
if (shoe) {
$scope.shoes.push(shoe);
}
});
$scope.$broadcast('shoes-ready',$scope.shoes);
});
});
根据您的指令
$scope.$on('shoes-ready',function(evt,shoes){ /*process shoes*/})
将$promise
导入指令的作用域应该很好。使用&
将其作为绑定表达式导入:
视图:
<div user-shoes shoes-promise="user.$promise" ... ></div>
指令:
angular.module('myModule')
.directive("Shoes", ["", function () {
return {
...
scope: {
shoesPromise: '&'
}
...
}
}])
然后,在指令的link
函数中,您可以使用已解析的promise执行一些操作:
function link(scope) {
scope.shoesPromise()
.then(function(){
...
})
.catch(...)
}
我会在控制器中使用$watch和flag,而不是使用$broadcast,这在理论上可能会变得昂贵。类似于:
angular.module("UserShoes").controller("UserController", function ($scope) {
$scope.user = User.get({
userId: 1
});
$scope.shoes = [];
$scope.user.$promise.then(function (data) {
data.shoes.forEach(function (shoe, index) {
if (shoe) {
$scope.shoes.push(shoe);
}
});
$scope.shoes_ready = true;
});
});
然后在你的指令中:
var stop_watch = scope.$watch('shoes_ready', function(new_value) {
if (new_value === true) {
// do work son
stop_watch(); // Optional, if you are done with this watcher
}
});
相关文章:
- AngularJS-我怎么知道何时解决了对父控制器的承诺
- 角度控制器服务承诺不起作用
- Javascript对角控制器的承诺
- EmberJS在控制器中承诺
- 如何在AngularJS中承诺控制器后进行单元测试
- 在 nodejs 控制器中使用承诺
- AngularJS:我们如何向不同的控制器广播承诺
- AngularJS - $q的承诺不会级联到控制器
- 在 angularjs 控制器中对承诺调用进行单元测试时遇到问题
- Angular JS:我们可以在没有定义路由的控制器上设置解析或承诺吗?
- 角度控制器检查服务承诺更新视图
- AngularJS使用承诺和索引数据库 - 在页面上后将内容加载到控制器
- AngularJS控制器承诺那么不是一个函数
- 从工厂返回控制器$http承诺时未定义
- 具有承诺的 nodejs 控制器的多个存在点
- 在测试我的AngularJS控制器时,我如何模拟$http.get承诺中的结果
- AngularJS承诺和嵌套控制器
- 如何在单元测试中通过jasmine spy向angular控制器返回被拒绝/失败的承诺
- Angular服务/控制器没有返回承诺
- 角度控制器承诺和测试