从Angular

时间:2015-06-20 06:41:06

标签: javascript angularjs angularjs-directive angularjs-scope

我在控制器内部有一个范围函数,我需要从指令触发它,该指令是一个下拉列表,所以每当我改变值时我需要触发一个从指令到控制器的函数。

HTML

<dropdown-single-select filter-params=false eventlstn="selectTab('summary')" api-params="serviceApiParams"  select-options="filterData.classFilter" selected-value="filterData.selectedClassOptions" ></dropdown-single-select>

指令

.directive('dropdownSingleSelect',['$document', function($document){
    return {
        scope: {
          onSelect: '&',          
          selectOptions: '=',
          isoFilterParams:'=filterParams',
          isoEventListener:'=eventListener',
          selectedValue:'=',
          defaultOption:'=',
          disable:'&',
          apiParams:'='       
        },
        restrict: 'E',
        templateUrl: 'commonActions/waggle-single-select.tpl.html',
        link: function(scope, element, attr) {          

            scope.toggleOptions= function(){
                scope.showOptions = !scope.showOptions;
            }
            scope.selectOption = function(option){               

                if(scope.apiParams.reload){
                    scope.apiParams.classViewId=option.classViewId;
                    scope.$apply(attr.eventlstn);
                }            
        }
    };
}])

控制器

.controller('studentSummaryReportCtrl', ['$scope', function ($scope){

$scope.selectTab=function(data){
console.log(data);
}

}])

下拉工作正常,并且selectoption工作正常但是当涉及到范围。$ apply(attr.eventlstn); 它无法正常工作

2 个答案:

答案 0 :(得分:0)

添加eventlstn:&#39;&amp;&#39;然后在需要的范围内调用。$ apply(scope.eventLstn(args))

答案 1 :(得分:0)

您可以从指令链接功能调用控制器功能 因为你的指令是&#34;元素类型&#34; (E)您必须在指令中添加已添加为eventlstn="selectTab(summary)"的属性,您必须做的更改在

之下
return {
        scope: {
          onSelect: '&', 
          eventlstn: '&',         
          selectOptions: '=',
          isoFilterParams:'=filterParams',
          isoEventListener:'=eventListener',
          selectedValue:'=',
          defaultOption:'=',
          disable:'&',
          apiParams:'='       
        },

所以我添加了作为范围变量的第二个参数你要发送给控制器的参数形式selectTab函数是摘要那么如何将值传递给summary以便它将调用控制器函数在下面

例如,您需要将选项的值传递给选择选项卡的摘要,控制器函数将捕获该选项卡作为数据,您需要使用在指令属性中使用的相同键作为对象键。

scope.selectOption = function(option) {
    scope.eventlstn({
        summary: option
    })
};