【问题标题】:Is there a way to change the key of object dynamically using ng-repeat有没有办法使用 ng-repeat 动态更改对象的键
【发布时间】:2017-12-21 20:37:23
【问题描述】:

我的 json 对象是这样的,

$scope.myObject = {
                  "mainKey1":{
                     "name": "x",
                     "age": "20"
                   },
                  "mainKey2":{
                     "name":"y",
                     "age":"25"
                   },
                  "mainKey3":{
                      name:"z",
                      "age":"30"
                   }
                 };

我想改变 keys 例如, 我想将ng-repeat 中的"mainKey1" 更改为"newKey1"

我的 html 看起来像这样

<div ng-repeat="(key,obj) in myObject">
  <label>Name</label>
  <input type="text" name="name" ng-model="obj.name" 
    placeholder="enetr name"/><br/>

  <label>Age</label>
  <input type="text" name="age" ng-model="obj.age" placeholedr="enter age" /><br/>

  <label>Key </label>
  <select ng-options="k for k in keyCollection" ng-model="key" >
  </select>
</div>

但是看起来直接在ng-model中使用key不起作用,任何人都可以帮助达到预期的结果,提前谢谢

【问题讨论】:

  • 你为什么要在ng-repeat里面做呢?您还可以循环遍历 javacript 中的键
  • 因为我想让用户从 UI 更改键
  • @Adelin 不确定,但我想要唯一的键,但使用可以动态更改它
  • 谢谢你们,感谢你们的努力

标签: javascript html angularjs ionic-framework


【解决方案1】:

angular.module('app', []).controller('ctrl', function($scope) {
  $scope.myObject = {
    "mainKey1": {
      "name": "x",
      "age": "20"
    },
    "mainKey2": {
      "name": "y",
      "age": "25"
    },
    "mainKey3": {
      "name": "z",
      "age": "30"
    }
  };

  $scope.keyCollection = ['newKey1', 'newKey2', 'newKey3'];
  for (var key in $scope.myObject)
    $scope.keyCollection.push(key);

  $scope.changeKey = function(next, ex) {
    if (Object.keys($scope.myObject).indexOf(next) == -1) {
      var temp = $scope.myObject[ex];
      delete $scope.myObject[ex];
      $scope.myObject[next] = temp;
    }
  }

})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app='app' ng-controller='ctrl'>

  <div ng-repeat="(key,obj) in myObject">
    <label>Name</label>
    <input type="text" name="name" ng-model="obj.name" placeholder="enter name" /><br/>

    <label>Age</label>
    <input type="text" name="age" ng-model="obj.age" placeholedr="enter age" /><br/>

    <label>{{key}}</label>
    <select ng-options="k for k in keyCollection" ng-change='changeKey(temp, key)' ng-model='temp' ng-init='temp=key'></select>
    <br>
    <br>
  </div>
</div>

【讨论】:

  • 谢谢@Slava Utesinov,有没有办法直接从html本身做?
  • 我的意思是,有没有什么方法可以在不使用 javascript 的情况下实现这一目标?
  • 我认为不可以,因为您不能将完整的 changeKey 逻辑内联包含到 ng-change 指令中。有问题吗?
  • 一点也不,我只是想知道,如果有什么可用的,我想尝试一下,因为我知道你提供的解决方案,但无论如何非常感谢你的努力,将使用这个只有@Slava Utesinov
猜你喜欢
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 2018-04-15
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
相关资源
最近更新 更多