0

我对 Angular 还是很陌生,而且我已经在这个问题上转了一圈。

首先介绍一下背景知识,我正在使用 mean.io 的 MEAN 堆栈,它使用 Angular UI Router。

我的数据库中有一个 Post 模型,可以为其分配一个类别 ID。

当我创建一个新帖子时,我想从数据库中加载现有类别并将它们显示在一个选择框中。

从我所看到的我需要使用resolve,首先在名为config.js的文件中的resolve属性中使用逻辑感觉不正确 - 到目前为止,我已经在其中调用了一个服务并且我使用以下代码获取类别:

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

第一个问题是我无法访问控制器或视图中返回的数据。

其次,我只想加载属于某个组织的类别。我将为每个用户分配一个组织 ID,因此当我在 config.js 中时如何访问当前登录的用户 - 不过,这也不适合做这种逻辑。

任何帮助将非常感激。

谢谢

4

2 回答 2

1

配置.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(...)
    }]
};

Angular 管理你的依赖注入

于 2014-03-30T08:17:55.613 回答
0

假设 Categories 是 angular 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);
});

哪个应该工作...

于 2014-03-30T07:36:13.153 回答