创建绑定服务的角度指令?

时间:2014-04-29 15:52:04

标签: javascript angularjs angularjs-directive restangular

不确定我是否误解了如何在此处创建指令。比方说,我有一个控制器,如:

angular.module('myApp.controllers').controller('MyController', ['$scope', 'MyService', function($scope, MyService) {
    $scope.restangularService = MyService;
}

然后我有一个指令,如:

angular.module('myApp.directives').directive('myGrid', function() {
    return {
        restrict: 'A',
        templateUrl: 'some/path/here.html',
        scope: {
            restangularService: '&'
        },
        controller: ['$scope', function($scope) {
            //access $scope.restangularService to run some queries
        }
    };
});

然后我使用我的指令:

<div data-my-grid data-restangular-service='restangularService'></div>

我希望在我的指令中,我可以访问$scope.restangularService并拨打电话但是它没有正确填充。我这样做完全错了吗?有什么输入?我有一种感觉,我需要以某种方式使用ngModel指令。

1 个答案:

答案 0 :(得分:0)

&#34;&amp;&#34;指令中隔离范围值的前缀提供&#34;单向绑定&#34;这使得指令的范围内有一个getter函数。

您对该对象所做的任何更改都不会返回到该指令的父控制器(它是&#34;只读&#34;)。因此,您无法访问“restangularService”&#39;如在控制器范围内那样变量,而不调用getter函数:

angular.module('myApp.directives', []).directive('myGrid', function() {
    return {
        restrict: 'A',
        templateUrl: 'some/path/here.html',
        scope: {
            restangularService: '&'
        },
        controller: ['$scope', function($scope) {
            console.log($scope.restangularService()); // outputs service value
        }]
    };
})

或者,您可以使用&#34; =&#34;,这将允许您直接访问传入的范围对象:

angular.module('myApp.directives', []).directive('myGrid', function() {
    return {
        restrict: 'A',
        templateUrl: 'some/path/here.html',
        scope: {
            restangularService: '='
        },
        controller: ['$scope', function($scope) {
            console.log($scope.restangularService); //outputs service value
        }]
    };
})

Plunk demonstrating both types