Присваивать значения ServiceStack DTO Angular 6

#angular #servicestack

#angular #servicestack

Вопрос:

У меня есть форма, которая используется для создания объекта типа Equipment со свойствами, именем и идентификатором. Когда я отправляю форму, я получаю данные. В объект Equipment.

 var result: Equipment = this.addEquipment.value;
  

затем я создаю экземпляр Createquipment, куда я хотел бы вставить значения из Equipment.

 var createEquipment: CreateEquipment = new CreateEquipment();
  

Затем я пытаюсь добавить имя из результата.

 createEquipment.name = result.name; 
  

Здесь происходит сбой (значение не сохраняется) Однако, когда я делаю это

 createEquipment.name = "ASDASDASD"; 
  

это работает.

Есть ли что-то очевидное, чего я не понимаю?

Изображение console.log (результат) и console.log(createEquipment) после имени должно было быть определено.

Изображение console.log (результат) и console.log(createEquipment) после имени должно было быть определено.

Ответ №1:

Это не содержит достаточной информации, чтобы определить, в чем проблема, но всякий раз, когда вы используете явное приведение, вы сообщаете компилятору, что это за тип, он не знает во время выполнения, верно ли это утверждение, вам решать, чтобы тип, который вы указываете ему, обрабатывался как тип, который он получает во время выполнения.

Когда вы сталкиваетесь с подобной проблемой, запишите фактическое значение, чтобы вы могли подтвердить, что оно соответствует ожидаемому типу / форме, т. е:

 var result: Equipment = this.addEquipment.value;
console.log(result);
  

Вам никогда не нужно указывать тип при создании нового экземпляра, это подразумеваемое и ненужное дублирование, просто сделайте:

 var createEquipment = new CreateEquipment();
  

Если это проблема, войдите в систему, чтобы увидеть, что вы на самом деле назначаете:

 console.log(result.name, result);
createEquipment.name = result.name; 
  

Ваш вопрос предполагает, что result.name не содержит того, что вы думаете, что он делает.


Просмотр обновленного скриншота показывает, что проблема заключается в том, что объект JavaScript во время выполнения использует PascalCase, но тип предполагает camelCase. Если вы используете ServiceStack с .NET Core, по умолчанию он должен использовать camelCase, если вы каким-либо образом не переопределили его, например, с помощью JsConfig.* или иным образом вынуждаете его использовать PascalCase.

Если вы не используете .NET Core, вы можете принудительно использовать camelCase с:

 SetConfig(new HostConfig { 
    UseCamelCase = true 
});
  

Комментарии:

1. Да, я знаю, что я только что определил тип, чтобы получить проверку типа в компиляторе. Я вижу, что result.name равно входному значению. Я обновлю вопрос с помощью экрана печати.

2. Я запускаю его на .NET Core, и я не принудительно подключал его к PascalCase (насколько мне известно), однако я использую Name в HTML, что, возможно, является причиной сбоя?

3. @Atletekristiansen Я понятия не имею, как this.addEquipment было заполнено, я предположил, что оно пришло из сервиса, но вы должны изучить, как оно было создано.

4. Да, это исправлено .. по какой-то причине я использовал «Name» в форме. Переименовал имя входных данных в name, и это исправило ситуацию. Еще раз спасибо за помощь.