如何在指令 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
指令中的模板。它也将在 link
或 controller
内分别通过 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
我希望能够在我的指令 '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
指令中的模板。它也将在 link
或 controller
内分别通过 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