点击

时间:2016-12-26 12:23:50

标签: javascript angularjs

当我使用ng-clicked时,我试图将数据发送到控制器的指令链接函数,但我没有将数据发送到指令,该指令在第一次加载页面时调用

这是我的HTML代码

 <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
  }
}
});

3 个答案:

答案 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