2014-03-30 81 views
0

我對Angular很新穎,現在我已經在這個圈子裏繞了一圈。在Angular控制器中解析數據

有點背景第一,我使用了使用Angular UI路由器的mean.io中的MEAN堆棧。

我在我的數據庫中有一個Post模型,可以爲其分配一個類別ID。

當我創建一個新帖子時,我想從數據庫中加載現有的類別並將它們顯示在選擇框中。

從我所看到的,我需要用決心,首先它不覺得有正確的決心財產是在一個名爲config.js邏輯的 - 到目前爲止,我打的電話到服務於那裏,即時得到的類別回用下面的代碼:

.state('create post', { 
    url: '/posts/create', 
    templateUrl: 'views/posts/create.html', 
    controller: 'PostsController', 
    resolve: { 
     loadCategories: function (Categories) { 
     Categories.query(function(categories) { 
      return categories; 
     }); 
     } 
    } 
}) 

的第一個問題是,我不能訪問我的控制器或視圖返回的數據。

其次我只想加載屬於某個組織的分類。我將爲每個用戶分配一個組織標識,所以當我在config.js中時,如何訪問當前登錄的用戶 - 雖然這並不適合做這種邏輯。

任何幫助將非常感激。

感謝

+0

可以'Categories.query'返回承諾? – wayne

+0

@wayne yes對類別的反應有一個$ promise屬性。 –

回答

0

假設分類的角度resource,你應該能夠只是

loadCategories: function (Categories) { 
    return Categories.query(); 
} 

然後在你的控制器:

.controller('PostsController', function ($scope, loadCategories) { 
    $scope.categories = loadCategories; 
}); 

好吧,閱讀您的意見,這聽起來就像你會遇到一些問題,因爲你想把它注入控制器,但只能在某些狀態。你可以嘗試:

.state('create post', { 
    url: '/posts/create', 
    templateUrl: 'views/posts/create.html', 
    controller: 'PostsController', 
    data: { 
    categories: Categories.query() 
    } 
}) 

然後

.controller('PostsController', function ($scope, $state){ 
    console.log($state.current.data.categories); 
}); 

這應該工作...

+0

感謝回覆Dave,對Angular來說很新穎,我認爲我把它放在了resolve屬性中?那我該如何從我的控制器訪問它? –

+0

我補充說,但我現在在其他操作上遇到錯誤,比如試圖讀取一篇文章 - '''錯誤:[$ injector:unpr] http://errors.angularjs.org/1.2.14/$injector/ unpr?p0 = loadCategoriesProvider%20%3C-%20loadCategories'''' –

+0

感謝戴夫,是的,這是正確的,我也需要能夠傳遞一個id到Categories.query(),因此它只返回正確的對象。上面的@tasseKATT答案似乎是將路線中的邏輯分開的方式,我現在只是試圖實現它。 –

1

config.js:

寄存器後狀態:

.state('post', { 
     url: '/posts/create', 
     templateUrl: 'views/posts/create.html', 
     controller: 'PostsController', 
     resolve: PostsController.resolve 
     }) 

寄存器帖子控制器:

.controller({ 
    PostsController: ['$scope', 'loadCategories', PostsController], 
    ... 
    }) 

控制器功能:

function PostsController($scope, loadCategories){ 
    $scope.categories = loadCategories; 
}; 

PostsController.resolve = { 
    loadCategories: ['dependencies', function(dependencies){ 
     return dependencies.query(...) 
    }] 
}; 

角管理您的依賴注入

相關問題