angularjs - 在ng-change上传递所选对象的其他属性

时间:2013-09-05 15:29:06

标签: angularjs

如何在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);

    }

}

http://jsfiddle.net/webtheveloper/Qgmz7/8/

4 个答案:

答案 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值搜索到该列表中即可获得所需的对象。

小提琴参考:https://jsfiddle.net/vaibhavgavali92/7b7xdyzj/18/

答案 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>