我的代码就像这样
<body ng-app="myApp" ng-controller="MainCtrl">
<div>Name only
<input ng-model="search.name" />
<br />
<table id="searchObjResults">
<tr>
<th>Name</th>
<th>Phone</th>
</tr>
<tr ng-repeat="friendObj in friends | filter:search:strict | limitTo:1">
<td>{{friendObj.name}}</td>
<td>{{friendObj.phone}}</td>
</tr>
</table>
</div>
<div>
<button type="button" id="btn_submit" ng-click="submitForm()">Get rates</button>
</div>
angular.module('myApp', []).controller('MainCtrl', ['$http', '$scope', function ($http, $scope) {
$scope.friends = [{
name: 'John',
phone: '555-1276'
}, {
name: 'Mary',
phone: '800-BIG-MARY'
}, {
name: 'Mike',
phone: '555-4321'
}, {
name: 'Adam',
phone: '555-5678'
}, {
name: 'Julie',
phone: '555-8765'
}, {
name: 'Juliette',
phone: '555-5678'
}];
$scope.submitForm = function () {
// i want to get the data here
};
}]);
正如您所看到的那样,我的屏幕上只有一个friend
处于活动状态。当我按下提交按钮时,我希望该数据(已过滤的单行)成为当前$scope.friends
上的唯一值,以便我可以将其作为所选数据发送到外部服务。任何人都可以指出我在这里需要做什么
的 Fiddle
注意:我无法更改此按钮的位置。
答案 0 :(得分:5)
为什么不让你的按钮成为表格行的一部分,因为只有一个? Here is a JSFiddle showing it working in that fashion
按钮的ng-click函数处理程序可以简单地获取您感兴趣的实际friendObj参数:
<button type="button" ng-click="submitForm( friendObj )">Get rates</button>
编辑:如果你不能移动按钮,实际上有办法做到这一点;使ng-repeat对新数组进行操作,该数组可在ng-repeat之外访问。所以你的ng-repeat语句变为:
<tr ng-repeat="friendObj in newArray = (friends | filter:search:strict | limitTo:1)">
然后你的按钮可以简单地引用单元素数组:
<button type="button" ng-click="submitForm( newArray )">Get rates</button>
Updated Fiddle here: - )
答案 1 :(得分:2)
如果您将过滤器放在控制器而不是视图中,则可以设置$scope.result
函数可以使用的submitForm
之类的变量。例如,在HTML中,您可以向搜索字段添加ng-change
指令,如下所示:
<input ng-model="search.name" ng-change="updateResult()" />
然后,您不是使用ng-repeat
,而是使用ng-show
来显示一个结果,或者如果没有结果则隐藏该行:
<tr ng-show="result">
<td>{{result.name}}</td>
<td>{{result.phone}}</td>
</tr>
然后在你的控制器中:
$scope.search = {name: ''};
$scope.updateResult = function() {
$scope.result = $filter('filter')($scope.friends, $scope.search.name)[0];
}
$scope.updateResult();
// ...
$scope.submitForm = function() {
// $scope.result can be used here
}
编辑:这种方法的优势在于它有点DRYer,因为您不会在submitForm
内重新过滤。 MarcoS的方法具有缩短的优势!
答案 2 :(得分:2)
试试这个:
$scope.submitForm = function () {
var data = $filter('filter')($scope.friends, $scope.search.name);
};
小提琴here。