从HTML选择访问对象属性。

时间:2013-06-28 01:30:35

标签: html object angularjs

情境: 我正在尝试访问ng-Model对象(myRide)的属性(代码)。

  1. 我尝试过这样做

    <select ng-model = "myRide" 
      ng-change = "getCode(myRide.code)"> 
    

    ...和getCode,

    alert(parameter) //which should be myRide.code.

  2. 我也试图通过

    来做到这一点
    <select ng-model = "myRide" 
      ng-change = getCode(myRide)
    

    (注意:传递'myRide',而不是'myRide.code')...并且在getCode中,

    alert(myRide.code).

  3. myRide确实包含一个名为'code'的属性,该属性未定义。

    问题:两次尝试都不会产生想要的结果。


    如何让它显示属性(代码)?

    这是JSFiddle:http://jsfiddle.net/a2J6z/1/

2 个答案:

答案 0 :(得分:2)

更好的方法是重构视图。不使用ng-repeat on选项内的选项,而是使用ng-options指令。然后,您可以将实际对象绑定到模型而不仅仅是JSON字符串,这是您当前的小提琴正在做的事情。

您的新选择似乎

<select ng-options="car.Name for car in myGarage" ng-model="myRide" ng-change="getCode(myRide)"> 

</select>

然后在您的控制器中

$scope.getCode = function(car){
    alert(car.code);
}

更新的小提琴:

http://jsfiddle.net/a2J6z/5/

答案 1 :(得分:1)

我更新了小提琴:

http://jsfiddle.net/a2J6z/3/

var ngApp = angular.module('ngAppl',[]);

function aControlla($scope){

    $scope.myRide = "bus";

    $scope.getCode = function(car){
        alert(JSON.parse(car).code);
    }

    $scope.myGarage = [
        {Name: "Toyota 86", code:"1"},
        {Name: "Hyundai Genesis Coupe", code:"2"},
        {Name: "Nissan GTR", code:"3"},
        {Name: "Veyron", code:"4"}
    ];
};

<div ng-app="ngAppl">
    <div ng-controller="aControlla">

        <select ng-model="myRide" ng-change="getCode(myRide)">

            <option ng-repeat="car in myGarage">{{car}}</option> 
            <!--Note: value of myRide MUST be simply 'car' (not say, 'car.Code')-->

        </select>

        <br/> This shows that 'myRide' contains the property called 'Name', and importantly, 'code':<br/> {{myRide}}




    </div>
</div>

基本上我只是通过myRide作为参数警告汽车是什么,它显示了JSON字符串,所以我添加了解析来让它给我代码。可能有更好的方式我可以说是AngularJS noob。