2016-02-02 6 views
-1

Я пытаюсь скопировать простую переменную области, содержащую идентификатор, без ссылки на него.Угловой/Javascript: Скопируйте простое число по значению без ссылки

Вот фрагмент кода, показывающий, что я делаю:

.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 все содержат тот же идентификатор. Итак, каков правильный способ копирования без ссылки?

У меня нет подсказки о том, что происходит.

Редактировать: Это я делал неправильно с функцией map.

+0

Почему ваш ход 'this.supportedProjects' через' карте() ', который устанавливает для всех идентификаторов одинаковое значение? Это желаемое поведение? Если нет, то что? –

+0

Это просто переформатировать объект, чтобы иметь правильный 'title', возможно, есть лучший способ сделать это, хотя – Ellone

+1

Но вы устанавливаете каждый идентификатор объектов' controllerScope.tId'. Это то, что вы хотите сделать? Я действительно не понимаю эту идею. –

ответ

1

Не уверен, если я понимаю, что вы пытаетесь сделать, но это должно работать:

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

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

    return object; 
}); 
+0

Да, как вы сказали, я пропустил карту. Единственное, что отсутствует после этого, это 'this.add.project.id = this.tId;' перед 'push (...)' – Ellone

+0

Великий я смог помочь :) –

0

Попробуйте это:

.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++; 
    /* ... */ 
    }; 
}