如何在dropdown / ng-options
中从加载的json中获取其他属性在ng-change上我还想传递所选对象的campaignType。
我怎么能这样做?
我的观点看起来像这样
<div ng-app>
<div ng-controller="cCtrl">
<select ng-model="campaign" ng-options="c.id as c.name for c in campaigns" ng-change="search2(c.campaignType)">
<option value="">-- choose campaign --</option>
</select>
</div>
</div>
我的控制器看起来像这样
function cCtrl($scope) {
$scope.campaigns = [{
"custID": 1,
"custName": "aaa ",
"msgID": 3,
"msgName": "Email Test Msg",
"id": 2,
"name": "Email Test Campaign",
"description": "Test Campaign",
"campaignType": "Email",
"created": "1374229715",
"isActive": 1,
"isDeleted": 0
}];
$scope.search2 = function (campaignType) {
alert(campaignType); // not working
alert($scope.campaign.campaignType); // not working
//console.log($scope.campaign.campaignType);
}
}
答案 0 :(得分:22)
您可以将所选对象传递给像这样的
函数,而不是传入属性<select ng-model="campaign" ng-options="c.name for c in campaigns" ng-change="search2(campaign)">
的 Working Demo 强>
答案 1 :(得分:8)
检查出来:http://jsfiddle.net/Qgmz7/9/
您不在ngRepeat环境中。 ngOptions完全不同。
<select>
上的 ngModel将获取<option>
的值,而不是整个对象的值。同样,您不在ngRepeat内,您无权访问您的对象。
无需将值作为参数传递,您可以从$scope
获取它。事实上你也不需要ngChange,你可以$scope.$watch('campaign', ...)
所以
$scope.search2 = function () {
console.log($scope.campaign);
}
答案 2 :(得分:1)
你也可以这样试试(我们可以说哈哈),
<select ng-model="campaign" ng-options="c.id as c.name for c in campaigns" ng-change="search2(campaign,campaigns)">
<option value="">-- choose campaign --</option>
</select>
基本上这段代码将会将ng-model和整个下拉列表一起传递给ng-change
。
因此,在search2函数中,您只需将ng-model
值搜索到该列表中即可获得所需的对象。
答案 3 :(得分:0)
在某些情况下,例如只显示成员值对应的项目选择不需要调用Controller函数。例如,如果您要显示与所选广告系列相对应的广告系列类型,则可以按以下方式编写。
<select ng-model="campaign" ng-options="c.name for c in campaigns">
...
<tr><td>Campaign Type:</td><td>{{campaign.campaignType}}</td></tr>
<tr><td>Campaign Description:</td><td>{{campaign.description}}</td></tr>