Parent directive controller undefined when passing to child directive

前端 未结 2 930
迷失自我
迷失自我 2021-01-28 09:02

I asked general question here in this post. I\'ve got answer with working example; however when I try to use this example to modify existing code, I get error. See my code below

相关标签:
2条回答
  • 2021-01-28 09:48

    Because it's require not required.

    angular.module('myApp', [])
      .controller('MyDirectiveController', MyDirectiveController)
      .directive('tmpMenu', function() {
        return {
          restrict: 'AE',
          replace: true,
          transclude: true,
          scope: {
            disabled: '=?ngDisabled'
          },
          controller: 'MyDirectiveController',
          template: '<div>myDirective Disabled: {{ disabled }}<ng-transclude></ng-transclude></div>',
          link: function(scope, element, attrs) {}
        };
      })
      .directive('tmpMenuLink', function() {
        return {
          restrict: 'AE',
          replace: true,
          transclude: true,
          require: '^^tmpMenu',
          template: '<div>childDirective disabled: {{ disabled }}</div>',
          link: function(scope, element, attrs, MyDirectiveController) {
    
            scope.disabled = MyDirectiveController.isDisabled();
    
          }
        };
      })
    
    function MyDirectiveController($scope) {
      this.isDisabled = function() {
        return $scope.disabled;
      };
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.3/angular.min.js"></script>
    <div ng-app="myApp">
      <tmp-menu ng-disabled="true">
        <tmp-menu-link></tmp-menu-link>
        <tmp-menu-link></tmp-menu-link>
      </tmp-menu>
    </div>

    0 讨论(0)
  • 2021-01-28 09:55

    You have a typo in your code:

    required:'^^tmpMenu',
    

    change it to

    require:'^^tmpMenu',
    

    Check this plunkr

    https://plnkr.co/edit/DgyW3OFgr1GyAR8fuATi?p=preview

    0 讨论(0)
提交回复
热议问题