从子指令获取角度父指令范围

时间:2014-08-21 21:20:45

标签: angularjs directive

我正在尝试从子指令访问父指令的范围。 请参阅jsbin

http://jsbin.com/tipekajegage/3/edit

当我点击按钮时,我想得到prod的价值。

var cpApp = angular.module('cpApp',[]);

cpApp.directive('cpProduct', function(){
  var link = function (scope, element, attr) {
    console.log('scope.prod '+ scope.prod);
  };

  return {
    link: link,
restrict: 'EA',
scope: {
  prod: '='
    }
  };
});

cpApp.directive('mediaButtons', [function(){

var template = 
'<button ng-click="addToFavoriteList()">get prod from parent</div>' + 
'</button>';

var controller = function($scope){
    var vm = this;
    $scope.addToFavoriteList = function(event){
       console.log($scope.$parent.prod);
      //GET PROD?
    };

};
return {
    template: template,
    restrict: 'E',
    controller: controller,
    scope: true
};
}]);

2 个答案:

答案 0 :(得分:1)

您需要将父函数作为require传递并将其分配给本地范围:

var linkFunction = function (scope, element, attrs, cpProductCtrl) {
    scope.prod=cpProductCtrl.prod;

您还需要在父函数上定义一个控制器,如下所示:

controller: function($scope){
   this.prod=$scope.prod; 
}

然后你可以这样调用你的clickHandler方法:

console.log($scope.prod);

Here is the JS Bin如果我错过了任何描述。

答案 1 :(得分:1)

我稍微重构了你的代码,在你的cpProduct指令中创建了一个控制器,并在mediaButton中要求它访问它的范围。

See this plunker