angularjs - 具有不同范围的多个 AngularJS 指令

标签 angularjs angularjs-directive angularjs-scope

嗨,我在同一页面上有两个弹出指令。问题是当我点击其中一个时,它们都会弹出。

如何将每个范围相互隔离,以便仅弹出单击的弹出窗口?

HTML

<popup class="popup">
  <trigger>
    <a href="#" data-ng-click="showPopup()">Show Popup</a>
  </trigger>
  <pop>
   I popped up
  </pop>
</popup>

<popup class="popup">
  <trigger>
    <a href="#" data-ng-click="showPopup()">Show Popup</a>
  </trigger>
  <pop>
   I popped up too
  </pop>
</popup>

popup.js

angular.module('sembaApp')
  .directive('popup', function () {
    return {
        restrict:  'E',
        replace:    true,
      transclude: true,
      template:   '<div data-ng-transclude></div>',
      controller: function postLink($scope, $element, $attrs) {
        $scope.popup = false;
        $scope.showPopup = function() {
          $scope.popup = !$scope.popup;
        }
      }
    }
  })
  .directive('trigger', function () {
    return {
        require: '^popup',
        restrict:  'E',
        replace:    true,
      transclude: true,
      template:   '<div data-ng-transclude></div>',
    }
  })
  .directive('pop', function () {
    return {
        require: '^popup',
        restrict:  'E',
        replace:    true,
      transclude: true,
      template:   '<aside data-ng-transclude data-ng-show="popup"> yay</aside>'      
    }
  });

最佳答案

简化指令可能是一个更好的主意,这样作用域就很容易处理。

<div ng-app="sembaApp" ng-init="popup1=false;popup2=false;">
    <popup class="popup" ng-model="popup1">
        <pop data-ng-show="popup1">I popped up</pop>
    </popup>
    <popup class="popup" ng-model="popup2">
        <pop data-ng-show="popup2">I popped up too</pop>
    </popup>
</div>

angular.module('sembaApp', [])
    .directive('popup', function () {
    return {
        scope:{
            ngModel: '='
        },
        restrict: 'E',
        replace: true,
        transclude: true,
        template: '<div data-ng-transclude><a href="#" data-ng-click="showPopup()">Show Popup</a></div>',
        link: function postLink($scope, $element, $attrs) {
            $scope.showPopup = function () {
                console.log($scope.ngModel);
                $scope.ngModel = !$scope.ngModel;
            }
        }
    }
})

Demo on jsFiddle

关于angularjs - 具有不同范围的多个 AngularJS 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17971799/

相关文章:

javascript - 如何从 ngGrid 中显示的按钮调用范围方法 - 在 Angular js

javascript - 我希望能够使用模板在指令内设置 Angularjs ng-pattern 以及它自己的范围来验证表单

angularjs - 如何在 Angular JS 中设置 ng-valid-parse

angularjs - Angular 指令请求数据是不好的做法吗

javascript - 在 Controller 中使用 'var' 声明的变量,但在 Controller 中作为作用域引用

javascript - AngularJS XSRF 策略不支持 cookie 路径

css - AngularJS 样式问题 IE

javascript - $watch 指令中的元素宽度

angularjs - 使用 $http 加载 json 数据时的 Angular-grid

javascript - 基本 Yeoman Angular Todo 应用程序中的范围问题