访问ng repeat中自定义指令内的应用程序控制器作用域



我是新手,如果我问了一些显而易见的问题,很抱歉
我有一个应用程序,它的控制器在作用域中包含一些配置变量。我在ng repeat中使用了一个自定义指令,该指令必须使用此配置
出于调试目的,我需要在指令中反映对配置的更改。我怎样才能做到这一点
到目前为止,我没有工作,我的点映射未定义

       angular.module('demo', [])
      .directive('demoDir', function () {
          var dirController = ['$scope', function ($scope) {
              $scope.totalPoints = 0;
              $scope.$watch('person', function(newVal, oldVal){
                  resetPoints(newVal);
              }, true);
              function resetPoints(pPerson){
                   $scope.totalPoints = $pointsMap['VIP'] * pPerson.points ;
              } 
          return {
              restrict: 'E',   
              scope: {
                  person: '=' ,
                  pointsMap : '='
              },
              controller: dirController, 
              template: '<span> {{totalPoints}}</span>'
         }
      })
      .controller('mainAppController', function ($compile, $scope, $q ) { 
         /*CONFIG */
          $scope.points = {
                  'VIP': 8.50,  
                  'Standard': 7.50,     
          };
      });
      <demoDir person='myobject' pointsMap='points' />

您希望指令具有独立作用域的任何特定原因?如果没有使用隔离作用域的限制,您可以简单地将指令的作用域设为false(现在指令将使用父作用域)

        angular.module('demo', [])
  .directive('demoDir', function () {
      var dirController = ['$scope', function ($scope) {
          $scope.totalPoints = 0;
          $scope.$watch('person', function(newVal, oldVal){
              resetPoints(newVal);
          }, true);
          function resetPoints(pPerson){
               $scope.totalPoints = $pointsMap['VIP'] * pPerson.points ;
          } 
      return {
          restrict: 'E',   
          scope: false,
          controller: dirController, 
          link: function(scope, element, attrs){
              //scope.points should be available
          }
          template: '<span> {{totalPoints}}</span>'
     }
  })
  .controller('mainAppController', function ($compile, $scope, $q ) { 
     /*CONFIG */
      $scope.points = {
              'VIP': 8.50,  
              'Standard': 7.50,     
      };
  });
  //assuming that your directive is housed inside the mainAppController
  <div ng-controller="mainAppController">
    <demoDir/>
  </div>

如果要使用,您还可以访问指令的链接函数中的父作用域属性。

最新更新