我一直試圖解決這個問題幾個小時,並試圖找到堆棧溢出和其他網站的工作解決方案,但目前爲止還沒有工作。無法將POST響應對象綁定到我的視圖
的問題
我建立一個遊記web應用程序,允許用戶登錄和查看他們的行程(例如一個客場之旅)。目前,我正在實施該功能,讓用戶可以在單獨的視圖中查看他們從旅程列表中選擇的特定旅程。我傳遞選定旅程的id並從MongoDB中檢索對象。我使用POST實現了這一點。它的工作原理是所選行程的_id在請求中傳遞,然後用於使用Model.findById標識文檔 - 然後響應產生數據。數據綁定到$ scope.selection。
但是,雖然$ scope.selection包含數據(當記錄到控制檯)時,我似乎無法將其綁定到視圖(稱爲view_journey)。意思是,只要我想訪問,例如selection.name在我的view_journey.html中,表達式或ng-bind留空。
app.js
$scope.viewJourneybyId = function(id) {
var selectOne = { _id : id };
$http.post('http://localhost:8080/view_journey', selectOne).
success(function(data) {
$scope.selection = data;
$scope.$apply();
console.log("POST found the right Journey");
console.log($scope.selection);
}).error(function(data) {
console.error("POST encountered an error");
})
}
server.js
app.post("/view_journey", function(request, response, next) {
Journeys.findById(request.body._id, function(error, selection) {
if (error)
response.send(error)
response.json({ message: 'Journey found!', selection });
});
});
的index.html
<tr ng-repeat="journey in journeys">
<td>
<a href="#/view_journey" ng-click="viewJourneybyId(journey._id)">
{{journey.name}}</a>
</td>
<td>...</td>
</tr>
view_journey.html
<div class="panel panel-default">
<div class="panel-heading">
<h2 ng-bind="selection.name"></h2>
<!-- For Debugging -->
ID <span ng-bind="selection._id">
</div>
<div class="panel-body">
<table class=table>
<caption>{{selection.desc}}</caption>
...
</table>
</div>
</div>
反饋 這是我的堆棧溢出的第一個問題,所以也請告訴我,如果我我的措辭在可能被誤解的方式問題,以及是否不是我應該提供更多細節,例如控制檯輸出。謝謝;)
index.html和view_journey.html如何相關?它看起來像你有一個角路由發射,如果這樣(通常)創建一個新的控制器實例與一個單獨的範圍,所以它可能是$ scope.selection真的是未定義的。嘗試將view_journey.html放在與index.html相同的模板中,以測試您的數據流。或者,您必須提供有關應用程序結構的更多信息。 – tokkov
是的,我在我的app.js文件中設置了一個路徑,但是我只使用一個控制器(mainCtrl)作爲整個應用程序(是的,我知道,我應該儘快更改)...所以我不認爲這是問題。此外,以完全相同的方式設置的其他路線也可以訪問相似的數據集。 下面是路由和mainCtrl的完整app.js文件: [app.js](https://github.com/supernoir/travelogue/blob/master/app/scripts/app.js) 這裏是我的server.js [server.js](https://github.com/supernoir/travelogue/blob/master/app/server.js) –
無論何時控制器連接到您的視圖,都會創建一個控制器的新實例有自己的範圍。即使您使用具有不同模板的相同控制器,每當路線發生火災時也會發生這種情況。這意味着你的數據實際上並不存在於新控制器的範圍內,除非你以某種方式將其放在那裏。通常這是通過工廠或服務完成的。我會仔細看看你的代碼,看看我能看到什麼。 – tokkov