2015-09-04 3 views
0

У меня есть простой CRUD, который я собираю вместе с Angularjs. На дисплее списка продуктов я передаю пользователю новый шаблон представления для формы «Создать новый».

Форма отлично обрабатывает и обновляет базу данных. Затем я передаю пользователя обратно в список, используя «$ location.path (url)».

По какой-то причине, когда отображается страница списка, изменения не отображаются в области $, и вам необходимо обновить страницу, чтобы увидеть изменения.

Пример кода:

$scope.acns = acnFactory.query() 
    .$promise.then(function (data) { 
     $scope.acns = data; 
    }); 

вышеприведенные отображает список элементов.

$scope.createAcn = function() { 
    $scope.acn.isActive = true; 
    acnFactory.create($scope.acn); 
    $location.path('/acn'); 
} 

Приведенные выше сообщения, то новый продукт перенаправляет на страницу списка (/ ACN)

Мое предположение о том, что страница списка будет перерабатывать или смотреть изменения в $ объеме, но вид не обновляется ,

+0

В чем разница между $ scope.acn и $ scope.acns? – maddygoround

+0

$ scope.acns представляет все продукты. $ scope.acn - это один продукт. В первом блоке кода я вызываю список acns. Во втором блоке кода я обрабатываю форму для «создания нового» acn. Затем я перехожу к представлению/acn, в котором перечислены все акны. – crowsfeet

+0

может случиться так, что в качестве асинхронного вызова наша $ scope может не обновиться, попробуйте использовать $ scope. $ Apply() после $ scope.acns = data; , просто чтобы проверить погоду, он делает трюк – maddygoround

ответ

0

Проблема, скорее всего, здесь:

$scope.createAcn = function() { 
    $scope.acn.isActive = true; 
    acnFactory.create($scope.acn); 
    $location.path('/acn'); 
} 

создание продукта, безусловно, заключается в том, отправив запрос HTTP на сервер. Это асинхронно. Это означает, что acnFactory.create() возвращается сразу после запроса отправлено. Не после получения ответа.

Таким образом, этот код отправляет запрос на создание продукта и сразу же переходит на страницу, в которой перечислены продукты. Таким образом, запрос GET, отправленный для получения списка продуктов, отправляется почти в тот же момент, что и для создания нового продукта. Два запроса обрабатываются одновременно сервером, а возвращенный список содержит список без нового продукта, который создается в отдельной транзакции.

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

$scope.createAcn = function() { 
    $scope.acn.isActive = true; 
    acnFactory.create($scope.acn).then(function() { 
     $location.path('/acn'); 
    }); 
}; 
+0

Спасибо JB. Действительно ценю это. Я действительно понял это и использовал следующий код: $ scope.createAcn = function() { $ scope.acn.isActive = true; acnFactory.create ($ scope.acn) . $ Promise.then (функция() {$ scope.acns = acnFactory.query() . $ Promise.then (функция() {$ location.path (»/acn '); }); }); } – crowsfeet

+0

JB, Излишне говорить, что ваш код был намного лучше, чем я придумал, и это помогло мне уменьшить тонкость. Благодаря!!! – crowsfeet