如何从指令访问任何指令?

时间:2015-08-07 13:23:46

标签: angularjs angularjs-directive scope

我在一个模块中有两个指令。我想从A指令访问B指令。因为A指令应该使用B'范围。  指令:

angular.module('main').directive('ADirective',  function () {

    return {
        restrict: 'EA',
        templateUrl:'kk.html',
        controller: function ($scope) {

            $scope.usedParameter="test",

范围:真});

B指令:

angular.module('main').directive('BDirective',  function () {

    return {
        restrict: 'EA',
        templateUrl:'kk.html',
        controller: function ($scope) {

            //$scope.ascopeValue = 

范围:真});

在html中,我喜欢这样使用:(b指令模板)

<div tab-view name="Main">
        <div tab name="A">

            <div class="panel-default">
                <a-directive></a-directive>

            </div>
        </div>

如果我像这样注入b指令:

angular.module('main').directive('aDirective', [ 'bDirective', function (bDirective) {

未知提供商:错误即将来临。

2 个答案:

答案 0 :(得分:0)

您无法注入指令。但是你想用这个指令做什么?如果他们共享相同的逻辑,您应该创建服务或工厂。如果你想在HTML中使用该指令,你不必注入它,你可以像使用它一样使用它,但不要注入任何东西。

修改

在这种情况下,您可以传递一个带有属性的变量:

angular.module('main').directive('BDirective',  function () {

return {
    restrict: 'EA',
    templateUrl:'kk.html',
    scope: {
         passedAttribute= '='
    },
    controller: function ($scope) {
         console.log($scope.passedAttribute);

你的a-directive的HTML:

<div tab-view name="Main">
    <div tab name="A">

        <div class="panel-default">
            <b-directive passed-attribute="variableFromThisScope"></b-directive>

        </div>
    </div>

答案 1 :(得分:0)

如果您有兴趣在指令和指令所在的元素之间共享信息,则需要将该变量作为参数公开,并在scope中定义。

例如:

angular.module('main').directive('ADirective',  function () {
    return {
        restrict: 'EA',
        templateUrl:'kk.html',
        scope: {
            usedParameter : '=ascopeValue'
        },
        controller: function ($scope) {
            $scope.usedParameter="test",   
    });


<div tab-view name="Main">
    <div tab name="A">
        <div class="panel-default">
            <a-directive ascopeValue="bscopeVariable"></a-directive>
        </div>
    </div>
</div>

定义范围变量时,您有3个选项:

  • @绑定传入(插入)
  • =绑定传入的属性(双向绑定)
  • &绑定传入的函数(指令调用外部作用域中的函数)