我想調用指令控制器上的功能,使用它的ID訪問的情況下,從父控制器:上調用指令控制器功能
<my-directive id="id1" />
var dirController = getDirectiveByID("id1");
dirController.someFunc();
在您看來,什麼是最簡單的方法這樣做? 我看過的大多數解決方案都很難看/很複雜。
感謝
我想調用指令控制器上的功能,使用它的ID訪問的情況下,從父控制器:上調用指令控制器功能
<my-directive id="id1" />
var dirController = getDirectiveByID("id1");
dirController.someFunc();
在您看來,什麼是最簡單的方法這樣做? 我看過的大多數解決方案都很難看/很複雜。
感謝
我能理解你想要什麼來實現的,不幸的是,如果你想從指令專門揭露控制器API,我知道正確的方法是在指令使用require
但它是指令至指令並僅向下。
由於您my-directive
可以訪問父範圍,大概是從父作用域繼承,最簡單的方式來實現你想要的是初始化你的父母控制器
$scope.control = {};
那麼你myDirective
追加內內的對象作爲控制接口你想暴露給那個控制接口的函數,例如
$scope.control.someFn = function() {
...
}
從而在您的父母控制器,你應該能夠訪問那些你從指令曝光功能。
另一種解決方案是在控制器中註冊指令,然後激發你需要的功能(如觀察者模式)。
這裏有一個例子,你會發現它連接fiddle太
<body ng-app="app">
<div ng-controller="parentController" >
<h1>
{{title}}
</h1>
<child id="John"></child>
<child id="Heisenberg"></child>
<child id="Red"></child>
<ul>
<li ng-repeat="c in childs">
I'm {{c.scope.nameFunction()}}
<button ng-click="fireFunction(c.id,'nameFunction')">Say my name</button>
</li>
</ul>
</div>
</body>
控制器
var app = angular.module('app', []);
app.controller("parentController", function($scope,$rootScope){
$scope.title = "Title";
$scope.childs=[];
$scope.fireFunction = function(id, functionName){
for(i=0; i<$scope.childs.length; i++)
{
if($scope.childs[i].id===id){
window.alert($scope.childs[i].scope[functionName]());
}
}
}
});
指令:
app.directive('child', function() {
var __controller__ = {
restrict: 'E',
scope:{
id:"@"
},
link: function ($scope, element, attrs) {
console.log(attrs.id);
$scope.$parent.childs.push({id:attrs.id, scope: $scope});
$scope.nameFunction = function(){
return $scope.id
}
},
template: '<div>' + 'Hello Dad ! i am is {{id}}' +'</div>'
}
return __controller__
})
布萊恩嗨, ŧ爲你的答覆。在我的指令中,我使用隔離範圍。在這種情況下是否可以訪問父控制器作用域? –
父控制器範圍我的意思是頁面上的主控制器,而不是我可能需要的父指令。 –
來自另一篇文章的一種可能性是: –