2015-10-20 56 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