day*_*mer 6 javascript angularjs angularjs-service angularjs-scope angularjs-routing
我的app.js样子
var app = angular.module('pennytracker', [
'$strap.directives',
'ngCookies',
'categoryServices'
]);
app.config(function($routeProvider) {
console.log('configuring routes');
$routeProvider
.when('/summary', { templateUrl: '../static/partials/summary.html'})
.when('/transactions', { templateUrl: '../static/partials/transaction.html', controller: 'AddTransactionController' })
});
Run Code Online (Sandbox Code Playgroud)
而我的app/js/services/categories.js样子
angular.module('categoryServices', ['ngResource']).
factory('Category', function($resource){
return $resource(
'/categories/:categoryId',
{categoryId: '@uuid'}
);
});
Run Code Online (Sandbox Code Playgroud)
我有一条路线
.when('/transactions', { templateUrl: '../static/partials/transaction.html', controller: 'AddTransactionController' })
Run Code Online (Sandbox Code Playgroud)
我的控制器app/js/controllers/transactionController.js看起来像
function AddTransactionController($scope, $http, $cookieStore, Category) {
// some work here
$scope.category = Category.query();
console.log('all categories - ', $scope.category.length);
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序时,我看到console.log为
all categories - 0
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
joa*_*mbl 15
Category.query()是异步的.它会立即返回一个空数组,并在响应到达时添加请求的结果 - 来自http://docs.angularjs.org/api/ngResource.$resource:
重要的是要意识到调用$ resource对象方法会立即返回一个空引用(取决于isArray的对象或数组).从服务器返回数据后,将使用实际数据填充现有引用.这是一个有用的技巧,因为通常将资源分配给模型,然后由视图呈现.具有空对象导致无渲染,一旦数据从服务器到达,则对象用数据填充,并且视图自动重新呈现其自身显示新数据.
如果您需要在控制器中访问结果,您应该在回调函数中执行此操作,如下所示:
$scope.category = Category.query(function(){
console.log('all categories - ', $scope.category.length);
});
Run Code Online (Sandbox Code Playgroud)