Angularjs避免$ emit并在指令之间共享变量

时间:2015-04-30 05:43:18

标签: angularjs angularjs-directive angularjs-service

我有一个想法,我希望避免使用$ emit来共享范围变量,而是使用底层服务共享一些属性,问题是属性值在指令1中返回promise响应时设置当通过指令1在服务中设置属性值时,指令2已经被加载,因此属性在指令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){ ... } )