簡體   English   中英

從Angular中的指令調用控制器作用域函數

[英]Call a controller scope function from directive in Angular

我在控制器內部有一個作用域函數,我需要從指令中觸發它,該指令是一個下拉菜單,因此,每當我更改值時,都需要從指令到控制器中觸發一個函數。

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

}])

下拉列表可以正常工作,而select選項也可以正常工作,但是涉及到范圍。$ apply(attr.eventlstn); 它不起作用

添加eventlstn:'&',然后在需要的范圍內調用。$ apply(scope.eventLstn(args))

您可以從指令鏈接函數調用控制器函數,因為您的指令是“元素類型”(E),您必須添加已作為eventlstn="selectTab(summary)"到指令中的屬性,您eventlstn="selectTab(summary)"的更改是下面

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

所以我在范圍變量的第二個參數中添加了要從selectTab函數發送到控制器的參數是summary,因此如何將值傳遞給summary以便調用控制器函數如下

例如,僅以為您需要將option的值傳遞到控制器功能將捕獲為數據的select選項卡的摘要,您需要使用與在指令屬性中使用的鍵相同的鍵作為對象鍵。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM