2015-10-20 118 views
1

我想創建一個包含很多字段和一個按鈕的指令,當用戶單擊按鈕時,填充的信息應該能夠傳遞到搜索函數,該函數在指令。從指令到控制器的角度通過變量

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

app.controller("myCtrl", function($scope) { 

    $scope.doSearch = function(query) { 
     query.order="asc"; 
     console.log(query); //do api call 
    } 
}); 

app.directive('queryBuilder', function() { 
    return { 
     restrict: 'E', 
     scope: { 
      queryFn: '&' 
     }, 
     template: "<button ng-click='directiveClick()'>Click</button>", 
     replace: true,   
     link: function(scope, elm, attrs) { 
      scope.directiveClick = function(){ 
      var query={name:"bill",age:12} 
      scope.queryFn(query); 
      } 
     } 
    } 
}); 

view.html

<div ng-controller="myCtrl"> 
     <query-builder query-fn="doSearch()"></query-builder> 
    </div> 

doSearch()的 「query」 參數是不確定的,我怎麼可以把0​​對象,它是鏈接功能的myCtrl裏面?

我想到的另一種方法是使用雙向綁定查詢變量而不是傳遞搜索功能。哪種方法更好?

看到Plunkr

回答

2

你具有指令調用其範圍之外的功能的方法是非常有效的。然而,爲了使溝通工作,你需要:

1,使用指令

<query-builder query-fn="doSearch(query)"></query-builder> 

2時,在該指令指定的參數名,調用函數時,你必須通過對象,其中的鍵是來自#1的參數名稱。

scope.directiveClick = function(){ 
    var query={name:"bill",age:12} 
    scope.queryFn({query: query}); 
} 

Plunker