2014-05-24 28 views
0

我在$ resource.query()方法中遇到了一些問題。我試圖訪問它中的第一個元素,但它不適合我。選擇控制器返回集合沒有問題。

controller.js

angular.module('bookshelf').controller('bsMainCtrl', function($scope, bsBooks){ 
    var data = bsBooks.query(); 
    $scope.singleBook = data[0]; 
}); 

angular.module('bookshelf').controller('bsSelectionCtrl', function($scope, bsBooks){ 
    var booksData = bsBooks.query(); 

    $scope.books = booksData; 
}); 

main.jade

.singleBook 
    .selection 
    include selection 
    .content 
    include book-list 

書list.jade

div(ng-controller='bsMainCtrl') 
    p Title: {{ singleBook.title }} 
    p Author: {{ singleBook.author }} 
    p ISBN: {{ singleBook.ISBN }} 
    p Created at: {{ singleBook.createdAt | date }} 
    a(ng-href='/edit/{{ singleBook._id }}') Edit 

selection.jade

div(ng-controller="bsSelectionCtrl") 
    div(ng-repeat='book in books') 
    button(ng-click='selectBook()') {{ book.title }} 

service.js

angular.module('bookshelf').factory('bsBooks', function($resource) { 
    var BookshelfResource = $resource('/api/books/:_id', {_id: "@id" }, { 
    update: {method: 'PUT', isArray: false} 
    }); 

    return BookshelfResource; 
}); 

route.js

exports.getBooks = function(req, res){ 
    Book.find({}).exec(function(err, collection){ 
    res.send(collection); 
    }); 
}; 

難道角$ S應付有關?我曾嘗試使用Angular檢查器,但只能得出結論,singleBook是空的。

+0

VAR數據= bsBook.query(函數() {var first = data [0];})//等待服務器然後分配val。 – diproart

回答

2

$resource.query()返回一個承諾,最初不包含任何數據,因此您不能在您嘗試的位置通過編號索引來訪問它。

嘗試,而不是:

bsBooks.query().$promise.then(function(data){ 
    $scope.singleBook = data[0]; 
}); 

Demo

+1

解決了!謝謝 – Ayey

0

使用回叫或從服務器答應爲待機數據

var data = bsBook.query(function(){ 
    $scope.singleBook = data[0]; 
}) 

看到here

+1

這是我回答中提供的承諾版本的替代回調。他可能沒有理由分配給一個名爲data的局部變量,所以這可能會更好地表示爲'bsBooks.query(function(data){$ scope.singleBook = data [0];});'where data's value通過參數獲得。 –

相關問題