AngularJS: Access directive's isolated scope from parent controller

前端 未结 1 1410
死守一世寂寞
死守一世寂寞 2020-12-24 06:04

I want to write a directive with isolated scope but also want to make that scope available for the parent scope\'s controller. I found this solution:

相关标签:
1条回答
  • 2020-12-24 07:01

    To maintain proper separation of concerns, you should not mix scopes. Not to mention that it will be hard to synchronize. To summarize: your directive should not know anything about the parent scope (or its controller) and your controller should not know anything about a directive's internals. They are separate components in separate layers.

    The proper way to communicate between a controller and a directive is through directive attributes. In the case of a popup, say, this can be done with a simple boolean value.

    The controller and directive:

    app.directive('popupbutton', [function() {
      return {
        restrict: "E",
        scope: { isOpen: "=" },
        template: '<a ng-click="isOpen = !isOpen">Toggle</a><div>Open? {{isOpen}}'
      };
    }]);
    
    app.controller('MainCtrl', function($scope) {
      $scope.isOpen = false;
    });
    

    And the markup:

    <popupbutton is-open="isOpen"></popupbutton>
    

    This method requires no logic, works out of the box, and maintains clean separation of concerns. Here's an updated plunker: http://plnkr.co/edit/otIaGCLmiNdGcYEgi60f?p=preview

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