【问题标题】:Angular/Javascript : Copy a simple number by value without referenceAngular / Javascript:按值复制一个简单的数字而不参考
【发布时间】:2016-02-02 14:34:08
【问题描述】:

我正在尝试复制一个包含 id 的简单范围变量而不引用它。

这是一段代码,显示我在做什么:

.controller('ctl', function($scope, $rootScope, Resource) {
    var controllerScope = this;

    this.tId = 1;

    /* ... */

    this.addProject = function() {
      this.supportedProjects.push(this.add.project);
      this.supportedProjects = this.supportedProjects.map(function(object) {
        var id = angular.copy(controllerScope.tId);

        if (object.title.title)
          return {
            id: id,
            title: object.title.title,
          };
        else
          return {
            id: id,
            title: object.title,
          };
      });
      this.tId++;
    /* ... */
    };
}

在这种情况下,supportedProjects 中的对象都包含相同的 id。 那么什么是不参考复制的正确方法呢?

我不知道发生了什么。

编辑:是我在 map 函数上做错了。

【问题讨论】:

  • 您为什么要通过map() 调用运行this.supportedProjects,将所有ID 设置为相同的值?这是期望的行为吗?如果不是,那是什么?
  • 只是将对象重新格式化为具有正确的title,但可能有更好的方法来做到这一点
  • 但是您将每个对象 ID 设置为 controllerScope.tId。这是你想做的吗?我真的不明白这里的想法。
  • 再次,您是否要将所有受支持的项目设置为相同的 tId?这里期望的行为是什么?
  • 是的,我认为你是对的,我可能以错误的方式使用地图。我只是想更改标题字段

标签: javascript angularjs copy deep-copy


【解决方案1】:

不确定我是否理解您要执行的操作,但这应该可以:

this.supportedProjects = this.supportedProjects.map(function(object) {

    if (object.title.title)
      object.title = object.title.title;

    return object;
 });

【讨论】:

  • 是的,就像你说的,我误用了地图。之后唯一缺少的是this.add.project.id = this.tId;push(...)之前的@
  • 太好了,我能帮上忙 :)
【解决方案2】:

试试这个:

.controller('ctl', function($scope, $rootScope, Resource) {
    var controllerScope = this;

    this.tId = 0;

    /* ... */

    this.addProject = function() {
      this.supportedProjects.push(this.add.project);
      this.supportedProjects = this.supportedProjects.map(function(object) {
        var id = controllerScope.tId + 1;

        if (object.title.title)
          return {
            id: id,
            title: object.title.title,
          };
        else
          return {
            id: id,
            title: object.title,
          };
      });
      controllerScope.tId++;
    /* ... */
    };
}

【讨论】:

    猜你喜欢
    • 2010-11-05
    • 2019-12-26
    • 2011-02-19
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多