当我使用ng-clicked
时,我试图将数据发送到控制器的指令链接函数,但我没有将数据发送到指令,该指令在第一次加载页面时调用
<h2 ng-click="clickMe(somedata)"> click </h2>
<my-directive my-key="myVal"> </my-directive>
.controller('myController',function($scope){
$scope.clickMe=function(somedata){
$scope.myVal=somedata;
};
});
.directive('myDirective',function(){
return{
restrict:'E',
scope:{
myKey:'='
},
templateUrl:'exampleTempl.html',
controller:'myController',
link:function(scope,elem,attr){
console.log(scope.myKey); // getting undefined
console.log(scope.myVal); //here i want the data from controller when i clicked on ng-click
}
}
});
答案 0 :(得分:3)
您可以通过服务传递数据,或者您可以使用$rootScope
,但使用根范围是不好的做法。所以,使用服务。应该有更多的方法,但服务非常好。
以下是通过服务传递数据的明确示例:AngularJS Service Passing Data Between Controllers
$ rootScope的另一个:How to pass an object using $rootScope?
<强>更新强>
您还可以通过$scope.$emit
和$scope.$broadcast
通过父子控制器传递数据,但请记住,它仅适用于父子控制器。
但您可以使用$rootScope
和$rootScope.$emit
等$rootScope.$broadcast
执行相同的操作。如果您将使用它,它就不再重要了,控制器如何相互关联(对于兄弟&#34;控制器也是如此)。
本文应该对您有所帮助:https://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/
答案 1 :(得分:2)
我希望它适合你;
.directive('myDirective',function(){
return{
restrict:'E',
scope:{
myKey:'=bindingmyVal'
},
templateUrl:'exampleTempl.html',
controller:'myController',
link:function(scope,elem,attr){
console.log(scope.myKey); //here i want the data from controller when i clicked on ng-click
}
}
});
答案 2 :(得分:1)
由于控制器位于隔离范围的指令内,因此父范围无法使用其功能。直接设置变量:
$onChanges
在指令控制器中使用directiveApp.controller('myController',function(){
this.$onChanges = function(changesObj) {
if (changesObj.myKey) {
var val = changesObj.myKey.currentValue;
console.log(val);
};
};
});
Life-Cycle Hook1
{{1}}
有关详细信息,请参阅AngularJS Comprehensive Directive API - Life-Cycle Hooks