如何在指令 link 函数中使用来自控制器的变量?

How to use variable from a Controller in a Directive link function?

我希望能够在我的指令 'meetings' 中使用控制器 'useSpreadsheetData' 中的变量 "videoUrlId"。我怎样才能做到这一点?我查看了 require 但无法正常工作。

控制器:

app.controller('useSpreadsheetData', ['$scope', '$sce', 'getSpreadsheetData',      
function($scope, $sce, getSpreadsheetData){
for(var x in videos) {
      if(videos[x].switchValue) {
        var videoUrlId = videos[x].videoUrl;
        $scope.videoUrlId = videoUrlId;
        break;
      }
    }
};

指令:

app.directive('meetings', [ 'getCalendar', '$timeout', '$window',  
function(getCalendar, $timeout, $window){
return {
    restrict: 'E',
    templateUrl: 'scripts/directives/meetings.html',
    controller: 'useSpreadsheetData',
    link: function(scope){
    //Use videoUrlId variable here
    }
}
}]);

既然你提到你试图使用 require,我不得不假设 meetings 指令将是 useSpreadsheetData 控制器中某处的子元素,但是没有看到你的 HTML,我们不能确定。

由于您没有使用 isolate scope,您的指令将 原型 从自身上方的父控制器继承,在本例中为 useSpreadsheetData。因此,我们可以通过内插表达式访问它来简单地获得 videoUrlId{{videoUrlId}}。请注意 meetings 指令中的模板。它也将在 linkcontroller 内分别通过 scope.videoUrlId$scope.videoUrlId 提供。

笨蛋: http://plnkr.co/edit/MZIgXEiku4Z2PLzl3apz

HTML

<div ng-controller="useSpreadsheetData">
  Controller: <code>videoUrlId = {{videoUrlId}}</code><br>
  Directive: <meetings></meetings>
</div>

JavaScript

app.controller('useSpreadsheetData', function($scope) {

  var videos = [service call];

  for (var x in videos) {
    if (videos[x].switchValue) {
      var videoUrlId = videos[x].videoUrl;
      $scope.videoUrlId = videoUrlId;
      break;
    }
  }
});

app.directive('meetings', ['$timeout', '$window',
  function($timeout, $window) {
    return {
      restrict: 'E',
      template: '<code>videoUrlId = {{videoUrlId}}</code>'
    }
  }
]);

输出

Controller: videoUrlId = /1
Directive: videoUrlId = /1