2015-04-13 6 views
0

Я столкнулся странные проблемы с angularjs,не ngModel связывания целочисленное значение

Я написал API с Laravel и MySQL, которым возвращает данные в формате JSON.

На моем компьютере Ubuntu он возвращает id и foreign id как STRING в ответ json, и моя привязка ngModel работает нормально.

Недавно я переключился на свою машину Windows, которая запускает WAMP, здесь laravel возвращает id и foreign id как INTEGER, а привязка ngModel больше не работает.

Примеры

Laravel ответ JSON на Ubuntu выглядит следующим образом:

{ 
"id": "1234", 
"name": "enam", 
... 
} 

Laravel ответ JSON на Windows выглядит следующим образом:

{ 
"id": 1234, 
"name": "enam", 
... 
} 

У меня есть входной [текст] поле, привязывает этот ответ к ngModel следующим образом:

<input type="text" ng-model="vm.user.id" ...> 

На моей машине Ubuntu это нормально работает, в Windows я получаю пустое поле ввода.

Неужели кто-нибудь сталкивался с этой проблемой раньше? Как я могу исправить эту проблему чистым способом?

Я думаю, я мог бы наложить его .toString();, но это не кажется мне таким чистым.

Связывание в моем контроллере

vm.getCustomer = function() { 
    Customer.getById($stateParams.id) 
    .then(function(data) { 
     vm.customer = data.data; 
    }, function(error) { 
     vm.error = error.data; 
    }); 
}; 

И обслуживание клиентов просто возвращает вызов $ HTTP

Json ответ (Ubuntu)

{ 
    "id": "1", 
    "name": "enam", 
    "postalcode_id": "1179", 
    "created_at": "2015-04-09 19:48:47", 
    "updated_at": "2015-04-11 18:00:02", 
    "postalcode": { 
    "id": "1179", 
    "postalcode": "1090", 
    "city": "JETTE", 
    "province": "Brussel (19 gemeenten)" 
    } 
} 

И в окнах возвращает postalcode.postalcode, а идентификаторы - как INTEGER, Он работает с $ cast, поскольку @Matthew Brown предложил

ответ

1

Вместо проблемы с ОС, это, по-видимому, проблема браузера между ОС.

Просто установите его на стороне сервера, если ваш используете Laravel 5, вы можете уйти с просто добавив $ проливает атрибут модели:

protected $casts = [ 
    'id' => 'integer' 
]; 

Лично мне нравится использовать трансформаторы для моего API-интерфейсы. Посмотрите эту библиотеку под названием Fractal. Это делает в том числе отношения и тип литья мечты, плюс позволяет вашему api оставаться неизменным при изменении имени будущего столбца и т. Д.

+0

Спасибо большое, попробуем его – RVandersteen

+0

Он сделал трюк, глубже углубится в Фрактал. Хотя он чувствует себя очень непоследовательно, что Angularjs не может связывать целые числа в ngModel, но привязывать их к виду. Или я что-то пропустил? – RVandersteen

+0

Может быть, что-то не хватает, я мог бы указать на проблему, когда я мог видеть, где ваша модель установлена ​​в контроллере? –

Смежные вопросы