为什么ng-model在选择返回字符串而不是JSON?

时间:2016-08-16 15:18:34

标签: angularjs json drop-down-menu angular-ngmodel

我有以下代码:

<select class="form-control" id="existing-phases" ng-model="selectedPhase">
    <option disabled selected value>-- select an option --</option>
    <option ng-repeat="p in existingPhases" value="{{p}}">{{ p.Name }</option>
</select>

当我在我的选择中选择一个选项时,我希望得到与所选阶段相对应的JSON,如下所示:

{"ID":2,"Name":"Outlook"}

但是,我出于某种原因将JSON作为字符串获取:

"{\"ID\":2,\"Name\":\"Outlook\"}"

我怎样才能使ng-model返回JSON而不是字符串?

P.S。:我不想在一个方法中转换它,因为我知道你可以用JSON.Parse()做到这一点。

更新

调试打印:

enter image description here

2 个答案:

答案 0 :(得分:2)

我用你的代码设置了一个plunker,似乎正常工作

https://plnkr.co/edit/Q8Cmknqg8bGBc5hABtF1

<!DOCTYPE html>
<html>
  <head>
    <script data-require="angularjs@1.5.8" data-semver="1.5.8" src="https://opensource.keycdn.com/angularjs/1.5.8/angular.min.js"></script>
    <script>
      angular.module('app', [])
      .controller('FooCtrl', function($scope) {
        $scope.existingPhases = [
          {"ID":1,"Name":"a"},
          {"ID":2,"Name":"b"},
          {"ID":3,"Name":"c"},
          {"ID":4,"Name":"d"},
          {"ID":5,"Name":"e"}];
        $scope.selectedPhase;
      });
    </script>
  </head>
  <body ng-app="app">
    <div ng-controller="FooCtrl">
      <select id="existing-phases" ng-model="selectedPhase">
        <option disabled selected value>-- select an option --</option>
        <option ng-repeat="p in existingPhases" value="{{p}}">{{ p.Name }}</option>
      </select>
      {{selectedPhase}}
    </div>
  </body>
</html>

请检查您的代码我不认为这是一个选择指令问题

答案 1 :(得分:0)

我以为我错了,但我不是。如果使用ng-repeat而不是ng-options,则ng-model的属性将设置为JSON字符串而不是实际的javascript对象。我发现这个问题可以更好地解释它:Angular UI Select2, why does ng-model get set as JSON string?

因此,为了解决我的问题,我必须从ng-repeat更改为ng-options。