从模板中的指令调用控制器方法
Calling controller method from directive in template
我有一个位于模板中的指令,然后包含在页面中。
如果我将我的指令直接放在我的页面上,那么在单击按钮时我可以在我的控制器中调用一个方法。
但是,当我将指令放在模板中,然后将模板放在页面上时,我无法再从指令调用控制器中的方法。
我已经用我最近一次尝试下面发布的代码尝试了很多事情。但是,此代码会产生错误
asking for new/isolated scope on:
所以HTML先;
这是我的 HTML 页面。
<session-list trackid='san'></session-list>
这是模板HTML;
<div class="container col-sm-12 col-xs-12">
<div>Session list template for {{trackid}}</div>
<session-calendar callback-fn="ctrlFn()"></session-calendar>
</div>
我的主控制器看起来像这样,我想调用 "eventClick" 方法。
angular.module('GAP.viewsessions', ['ngRoute'])
.controller('viewsessionsCtrl', ['$scope', function($scope){
$scope.eventClick = function(eventData){
console.log(eventData);
}
}]);
然后"SessionList"指令;
angular.module("GAP.sessionList", [])
.directive("sessionList", function(){
return {
restrict: 'E',
link: function(scope, element, attributes){
},
scope: {
trackid: '@'
},
templateUrl: '/templates/sessionlist.html', // or use a path to a html file like 'path_to/template.html'
replace: true,
};
})
另一个指令是 FullCalendar,在事件的点击事件中我有这个;
eventClick: function(calEvent, jsEvent, view) {
scope.someCtrlFn();
if (scope.eventClick){
scope.eventClick(calEvent.data);
}
},
如果我包括这个;
scope: { someCtrlFn: '&callbackFn' },
我得到了之前引用的错误。如果我省略它,那么页面会呈现,但 "eventClick" 方法在我的控制器中永远不会 运行。
一种可能的解决方法是使用 angular 事件
在指令中注入 $rootScope
然后像这样:
$rootScope.$broadcast('cal-event-clicked', eventData)
在控制器中
$scope.$on('cal-event-clicked', function(evt, data){
$scope.eventClick(data)
})
我有一个位于模板中的指令,然后包含在页面中。
如果我将我的指令直接放在我的页面上,那么在单击按钮时我可以在我的控制器中调用一个方法。
但是,当我将指令放在模板中,然后将模板放在页面上时,我无法再从指令调用控制器中的方法。
我已经用我最近一次尝试下面发布的代码尝试了很多事情。但是,此代码会产生错误
asking for new/isolated scope on:
所以HTML先;
这是我的 HTML 页面。
<session-list trackid='san'></session-list>
这是模板HTML;
<div class="container col-sm-12 col-xs-12">
<div>Session list template for {{trackid}}</div>
<session-calendar callback-fn="ctrlFn()"></session-calendar>
</div>
我的主控制器看起来像这样,我想调用 "eventClick" 方法。
angular.module('GAP.viewsessions', ['ngRoute'])
.controller('viewsessionsCtrl', ['$scope', function($scope){
$scope.eventClick = function(eventData){
console.log(eventData);
}
}]);
然后"SessionList"指令;
angular.module("GAP.sessionList", [])
.directive("sessionList", function(){
return {
restrict: 'E',
link: function(scope, element, attributes){
},
scope: {
trackid: '@'
},
templateUrl: '/templates/sessionlist.html', // or use a path to a html file like 'path_to/template.html'
replace: true,
};
})
另一个指令是 FullCalendar,在事件的点击事件中我有这个;
eventClick: function(calEvent, jsEvent, view) {
scope.someCtrlFn();
if (scope.eventClick){
scope.eventClick(calEvent.data);
}
},
如果我包括这个;
scope: { someCtrlFn: '&callbackFn' },
我得到了之前引用的错误。如果我省略它,那么页面会呈现,但 "eventClick" 方法在我的控制器中永远不会 运行。
一种可能的解决方法是使用 angular 事件
在指令中注入 $rootScope
然后像这样:
$rootScope.$broadcast('cal-event-clicked', eventData)
在控制器中
$scope.$on('cal-event-clicked', function(evt, data){
$scope.eventClick(data)
})