我有一个想法,我希望避免使用$ emit来共享范围变量,而是使用底层服务共享一些属性,问题是属性值在指令1中返回promise响应时设置当通过指令1在服务中设置属性值时,指令2已经被加载,因此属性在指令2中未定义。 有什么想法吗?
答案 0 :(得分:1)
使用提供的信息,考虑编写此代码片段。希望这能为您提供一些见解,以找到最佳答案。
angular.module('myApp').service('SomeService', function($http) {
this.readData = function(dataUrl) {
// read data;
return $http.get(dataUrl)
.then(function(res) {
return res.data;
}, function(res) {
return res;
}
}
return this;
});
angular.module('myApp').controller('MyController', function($scope, SomeService) {
$scope.readData = function(url) {
SomeService.readData(url)
.then(function(res) {
$scope.data = res;
}, function(res) {
// Display error
}
}
}
angular.module('myApp').directory('myDirectory1', function() {
return {
restrict: 'A',
link: function(scope, elm, attrs) {
scope.data = scope.readData(url);
}
}
});
angular.module('myApp').directory('myDirectory2', function() {
return {
restrict: 'A',
scope: {
data : '@'
},
link: function(scope, elm, attrs) {
scope.$watch('data', function(newVal) {
// Do some stuffs
});
}
}
});
答案 1 :(得分:0)
也许将从directive1传递承诺的功能提取到服务中,并在两个指令中使用
.then(function(data){ ... } )