2015-08-25 4 views
0

У меня есть этот контроллер. Всякий раз, когда я пытаюсь привязать свои $ scope.things к моему полученному JSON с сервера, мой просмотр не будет обновляться. Фактически, если я оставил свой push(newThing) и раскомментировал свои звонки на getAllThings(), мое представление отобразит данные и, менее чем за секунду, удалит его.Почему эта двухсторонняя привязка данных не работает?

Проблема: на стороне сервера (Morgan работает с Node и MongoDB), я распечатываю объект json, прежде чем он будет передан моему клиенту, и объект верен, у него есть последний созданный объект.

Я хочу использовать push вместо того, чтобы делать другой запрос на сервер для получения данных, но я действительно расстроен из-за этой темы. Еще одна интересная вещь, что мои второй, третий и последующие призывы к insertThing() должным образом обновят мое представление. Это было похоже на невежественность. При необходимости я могу предоставить больше кода.

Контроллер:

$scope.insertThing= function(newThing){ 
    $scope.things.push(newThing); 
    $http.post('http://localhost:8080/things', newThing) 
    .then(function(res){ 
     //$scope.getAllThings(); 
     delete $scope.newThing; 
    }, function(res){ 

    }); 
    //$scope.getAllThings();  
}; 

$scope.getAllThings = function(userDpt){ 
    $http.post('http://localhost:1234/things/dpt/', {userDpt: userDpt}) 
    .then(function(res){ 
     $scope.things = res.data; 
    }, function(res){ 

    }); 
}; 

Узел сервера с Мангуста:

app.post('/things/dpt', function(req, res){ 
var department = req.body.dpt; 
var things= {}; 
TicketModel.find({ fromDpt: department}, 
    function(err,obj){ 
     res.json(obj); 
    }); 
}); 

Markup:

<tr ng-repeat="thing in things"> 
    <td> {{ thing.toDpt}} </td> 
    <td> {{ thing.status }}</td> 
    <td> {{ thing.deadline }}</td> 
    <td><button class="btn close" data-ng-click="deleteThing(thing._id)">&times;</button></td> 
</tr> 
+0

http://jsfiddle.net/arunpjohny/wknqxqmq/1/? –

+0

В вашей функции 'getAllThings', откуда появляется' data.json'? Я не вижу, чтобы это определялось где угодно. – raduation

+0

Это звучит как проблема с заказом, в котором вы загружаете данные, а затем вызываете свой метод insertThing. С кодом, который вы поставили, сложно сказать. Мы могли бы видеть больше. –

ответ

0

Ну, это было давно.

Весь этот код был полностью реорганизован. Проблема заключалась в assyncronous поведении JavaScript. Иногда функция getAllThings() заканчивается до строки удаления, и новые полученные данные просто исчезают после получения.

Путь к этой проблеме заключается в том, чтобы добавить еще один обратный вызов после HTTP-запроса.

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