Получить область родительского контроллера в директиве, используя контроллер вместо ссылки

Я использую контроллер «LocalCtrl» для всех функций, необходимых для директивы, но как мне получить область родительского контроллера в директиве и область действия из директивы обратно в контроллер.

Моя директива встроена в родительский контроллер. Я знаю, как использовать функцию ссылки и изолировать область действия для двусторонней привязки между директивой и контроллером. Я не уверен, как наследовать родительскую область, используя следующую структуру.

<div ng-controller = "mainCtrl">
    <my-directive></my-directive>
</div>  

app.controller('mainCtrl',function ($scope) {
    $scope.mainContent = "this is main content"
});

app.controller('LocalCtrl',function () {
    var vm = this;
    vm.content = "This is Header"
});
app.directive('mydirective',function () {
    return{
        controller:'LocalCtrl as local',
        templateUrl: '<div>{{local.content}}</div>',
    }
});

person kam bajwa    schedule 20.09.2016    source источник
comment
Не надо. Просто используйте bindToController или используйте трансклюзию. Не пытайтесь делать причудливые вещи с прицелами.   -  person gyc    schedule 20.09.2016
comment
Вы можете попробовать $scope.$parent в директиве   -  person Prianca    schedule 20.09.2016


Ответы (1)


Директивы в Angularjs имеют 3 области видимости, как указано ниже.

обратитесь В каких случаях директива angular область действия равна области действия контроллера?

1 . По умолчанию область действия имеет значение false , что в случае изменения переменной области действия в вашей директиве также изменяет переменную области видимости родителей, поскольку она не создает новую область.

 app.directive('mydirective',function () {
        return{
            controller:'LocalCtrl as local',
            templateUrl: '<div>{{local.content}}</div>',
        }
    });
  1. scope:true, при этом он создаст новую дочернюю область в дочерней директиве, которая прототипически наследуется от родительской области или родительской области контроллера.

    app.directive('mydirective',function () {
        return{
            scope:true,
            controller:'LocalCtrl as local',
            templateUrl: '<div>{{local.content}}</div>',
        }
    });
    

3: scope:{}: изолировать область действия, которая не наследуется от родительской области (может создавать повторно используемые компоненты/директивы)

просмотреть

   <div ng-controller = "mainCtrl ">
      <my-directive content="mainContent" some-fn="someFn"></my-directive>
  </div>   


    app.directive('mydirective',function () {
        return{
            scope:{
               twoWayConent:'=content',// two way data binding
               oneWayConent:'@conent', // one way binding
               someFn:'&someFn' //function binding ( 2 way)
             },
            controller:'LocalCtrl as local',
            templateUrl: '<div>{{local.content}}</div>',
        }
    });

4. using require:: если у вас есть одна директива в другой директиве, в объекте определения директивы (DDO) require может использоваться для доступа к переменным и функциям контроллеров родительской директивы в вашей дочерней директиве, как показано ниже.

просмотреть

 <parent-directive>
       <child-directive></child-directive>
</parent-directive>



 app.directive('childDirective',function () {
    return{
        require:'^parentDirective' // can be array of parents directive too
        link:function(scope,element,attrs,parentDirectiveController){
               console.log(parentDirectiveController) // can access parent directive controllers instances
        }
    }
});
person Shushanth Pallegar    schedule 20.09.2016