Angular ModelDriven formModel тип значения изменения карты ES6

Я следил за учебником angular hero по форме, управляемой моделью, и у меня возникла проблема с отображением,

const secretLairsDeepCopy: Address[] = formModel.secretLairs.map(
    (address: Address) => Object.assign({}, address)
  );

с адресом определить как

Address {
  street = '';
  city   = '';
  state  = '';
  zip    = '';
}

теперь, если я решу, например, установить zip как число, а в html сделать его выбором из списка, когда я сохраняю адрес в formModel, я получаю zip как строку, а не число, даже если я определяю zip как число и даю номер в подъезде, он автоматически меняется на строку.

Я не уверен, связано ли это с angular или с es6, поскольку .map определено в lib.es6.d.ts

Спасибо за чтение, хорошего дня!

РЕДАКТИРОВАТЬ:

Я сделал stackblitz в качестве образца, но тест выполняется на State атрибут, а не почтовый индекс, поскольку я использовал основу учебника героя, а состояние уже было выбрано из списка, его было быстрее изменить. Итак, в этом stackblitz я устанавливаю список состояний как список чисел и инициализирую состояние числом.

РЕДАКТИРОВАТЬ:

Похоже, это связано с <option *ngFor="let state of states" [value]="state">{{state}}</option> Которые должны быть заменены на <option *ngFor="let state of states" [ngValue]="state">{{state}}</option> cf Angular 2 cast выберите значение для int, как указано в комментарии Пьера Малле


person Niradnik    schedule 19.02.2018    source источник
comment
не могли бы вы добавить фрагменты вашего компонента/шаблона в список?   -  person Pierre Mallet    schedule 19.02.2018
comment
образец, сделанный на основе учебник по герою из angular.io. Я установил состояние как число, которое вы можете проверить, нажав «Сохранить», у вас появится окно предупреждения, в котором указан его тип.   -  person Niradnik    schedule 19.02.2018
comment
в окне предупреждения отображается тип адреса[0]['State']   -  person Niradnik    schedule 19.02.2018
comment
не могли бы вы экспортировать это в stackblitz или plunker? Честно говоря, мне некогда создавать окружение из ваших исходников.   -  person Pierre Mallet    schedule 19.02.2018
comment
stackblitz   -  person Niradnik    schedule 19.02.2018
comment
по умолчанию ввод имеет текстовый тип. Таким образом, он вернет строку. Вы можете добавить номер типа к своему ‹вводу›, но вы не сможете выбрать почтовый индекс, начинающийся с 0. Поэтому вам нужно выполнить ручной анализ данных перед отправкой их в ваш API. Кстати: никогда не делайте этого для почтового индекса, если он может начинаться с 0, вы потеряете эту информацию после синтаксического анализа.   -  person Pierre Mallet    schedule 19.02.2018
comment
Но сначала вам нужно будет изменить тип атрибута zip в вашем классе адресов ( zip: number )   -  person Pierre Mallet    schedule 19.02.2018
comment
Извините, я не переписал его, но я сделал тест числа / строки для штата, а не для почтового индекса, так как это было быстрее, это уже был выбор из списка. Я ничего не менял в Zip, поэтому не ожидал, что у меня будет номер, так как все в строке. Итак, для Sate я дал список номеров, из которых я могу выбрать, и я инициализирую Sate числом, поэтому он должен дать мне номер. Чтобы увидеть, что вам просто нужно изменить, скажем, имя героя, нажмите, чтобы сохранить оповещение, что это число. Затем выберите состояние из списка, затем нажмите «Сохранить», и состояние станет строкой, даже если вы выбираете из числового списка.   -  person Niradnik    schedule 20.02.2018
comment
дубликат stackoverflow.com/questions /39474188/ . Используйте ngValue вместо значения   -  person Pierre Mallet    schedule 20.02.2018
comment
Возможный дубликат значение выбора приведения Angular 2 к типу int   -  person Pierre Mallet    schedule 20.02.2018
comment
Использование [ngValue], кажется, исправляет проблему, даже если я не понимаю, почему, поскольку я использую форму, управляемую Reactive/Model, а не форму, управляемую шаблоном, поэтому я не понимаю, почему я должен использовать ngValue В любом случае, спасибо, похоже, работает   -  person Niradnik    schedule 20.02.2018
comment
[ngValue] — это угловое значение, где [value] связывает собственный атрибут значения параметра, который приводится к строке. Я не могу объяснить лучше, не глядя на код   -  person Pierre Mallet    schedule 20.02.2018