如何从2级指令访问控制器范围

时间:2013-09-02 20:13:15

标签: javascript angularjs

我正在尝试尽可能地构建通用代码。

所以我有2个指令,一个嵌套在另一个中,而我希望嵌套指令在主控制器$ scope上调用一个方法。

但是它要求父指令上的方法,我想知道如何针对主控制器范围而不是父指令执行方法。

以下是我的问题的示例代码 我的HTML应该是这样的:

<div ng-controller='mainctrl'>
  <div validator>
    <div datepicker select-event='datepickerSelected()'/>
  </div>
</div>

使用Javascript:

var app = angular.module("app",[]);

var mainctrl = function($scope){
  $scope.datepickerSelected = function(){
    //I WANT TO ACCESS THIS METHOD
  }
}

app.directive("validator",function(){
  return {
    scope : {
      //the datepicker directive requests a datepickerSelected() method on this scope
      //while I want it to access the mainctrl scope
    }
    link: function(scope){
      //some code
    }
  }
});

app.directive("datepicker", function(){
  return{
    scope: {
      selectEvent: '&'
    }
    link: function(scope, elem){
      //example code
      $(elem).click(scope.selectEvent); //want this to access mainctrl instead validator directive
    }
  }
});

1 个答案:

答案 0 :(得分:1)

只需删除validator指令的scope属性,从而消除其隔离范围。这意味着验证器将具有嵌套在(您的控制器)中的相同范围,而datepicker将使用该范围。

另一个选择,如果你想要两个都有隔离的范围(听起来不像你那样)是将函数传递给“验证者”的范围。