【发布时间】:2018-02-27 10:59:21
【问题描述】:
我在互联网上查找,但没有看到明确的答案。所以这是我的情况:
代码是head写的,请原谅不完整 我有一个看起来像这样的页面:
<div ng-controller="myController">
<my-customer my-callback="directiveCallback(item)" />
</div>
然后我有一个如下所示的脚本:
var app = angular.module('myApp', []);
app.controller('myController', ['$scope', 'apiService', function($scope, apiService) {
apiResponse = apiService.getAll('myRepo');
apiResponse.then(function(d){
$scope.data = d;
})
$scope.directiveCallback = function(item) {
// do stuff with $scope.data
}
}])
.directive('myCustomer', function() {
return {
scope: {
myCallback:'&'
},
template: 'Name: {{customer.name}} Address: {{customer.address}}'
};
});
问题是服务承诺解析并返回一些数据。 指令控制器正在调用另一个服务,该服务返回一些数据并在处理完它接收的数据后触发回调。
当他到达回调函数时,项目将附加到 $scope.data。
问题是在填充 $scope.data 之前触发了回调。 我最近解决了这个问题,以便我将回调包装在 $timeout 中,并通过一个指令参数设置一个可设置的延迟。
这是正确的方法还是有更好的方法?
【问题讨论】:
-
你已经有了一个承诺。您可以将其链接到directiveCallback 中,不是吗?
-
你的意思是把它传递给 direcitveCallback?
-
或者在指令回调中使用apiResponse?
-
1.拥有服务缓存并返回相同的 promise。 2 将服务注入任何依赖项(如组件、控制器和指令)。 3. 每个依赖项都可以调用所需的方法和服务,并对产生的承诺做一些事情。
-
不应该做的是传递回调,这是一个糟糕的设计,您将在其中创建紧密耦合的组件(通用术语,而不是 angularjs 组件,尽管它们也适用于该类别)。
标签: angularjs callback directive