2014-05-19 43 views
0

我有一个应用程序有两个单独的选择与绑定属性。我希望用户能够更改所选选项中的选定选项,这将触发一个功能。但函数将使用选择的BOTH中选定选项的值发送到$ http调用以进行数据库查询。以下是代码片段:ng-change不会触发函数

HTML:

<div class="yearFilter"> 
    <label>Working Year : </label> 
    <select ng-model="filterYear" ng-options="year.code as year.code for year in filterYears | unique:'code'" ngclick="setWorkingData({{filterSport}},{{filterYear}})"> 
    </select> 
</div> 
<div class="sportFilter"> 
    <label>Working Sport : </label> 
    <select ng-model="filterSport" ng-options="sport.code as sport.desc for sport in filterSports | unique:'code'" ngclick="setWorkingData({{filterSport}},{{filterYear}})"></select> 
</div> 

JS:

var PermitsCtrl = function ($scope, $http) { 
    var init = function() { 
     $http({ 
      ... 
     }).success(function(data) { 
      ... 
      setWorkingData($scope.filterYear,$scope.filterSport); 
     }).error(function(error){ 
      ... 
     }); 
    } 
    var setWorkingData = function (year, sport) { 
     $http({ 
      url .... 
      ... 
      data : "action=2&year_code="+year+"&sport_code="+sport, 
      ... 
     }).success(function(data) { 
      $scope.workingData = data.workingData; 
     }).error(function(error) { 
      ... 
     }); 
    } 
    init(); 
} 

在加载页面时,init()被成功触发,它建立了选择选项,进而触发setWorkingData()函数,它根据调用init()函数发送的两个选择(filterYear和filterSport)中的值,相应地更改DOM中的其他值。到目前为止,一切都很好。但更改select中的值不会触发setWorkingData函数。被呈现的HTML看起来是正确的:

<select ng-model="filterYear" ng-options="year.code as year.code for year in filterYears | unique:'code'" ng-change="setWorkingData(15,FB)" class="ng-valid ng-dirty"><option value="0" selected="selected">14</option><option value="1" selected="selected">15</option></select> 

当我改变无论是在浏览器中选择,对于setWorkingData()函数的参数值是正确的DOM两种选择呈现所选择的选项,但功能从未被触发。

回答

1

setWorkingData()在控制器中用私人访问来定义。为了它是从视图访问,它必须在范围中声明:

$scope.setWorkingData = setWorkingData; 

BTW,你不需要{{}}的论点ng-change/ng-click

ng-change="setWorkingData(filterSport, filterYear)" 
+0

这完善。谢谢@ExpertSystem! – mike