javascript - 固执己见的 Javascript,传递解析器不起作用(ui-router)

标签 javascript angularjs angular-ui-router

简单来说,我正在改编一个简单的示例来进行一些练习 opinionated javascript produced by Todd Motto

<强> Plunkr Of Issue 如最初所述

<强> Plunkr Of using a Resolver 使用传统解析器

问题是我的解析器无法访问工厂查询结果。我不知道为什么,但我发现这样做的方法太黑客了。在这里传递已解析对象的最佳方法是什么?

在这个例子中,我有一个简单的 MVVM 页面,其中包含一个带有 controllerAs 语法的 div。

<div ng-controller="ProjectCtrl as vm">
    <h1>Hello: {{vm.message}}</h1>
</div>

这是固执己见的 javascript 的配置。

'use strict';

(function(){
  /* Module & Dependencies */
  angular.module('project', ['ui.router']);
  angular.module('project').factory('Project', Project);
  angular.module('project').controller('ProjectCtrl', ProjectCtrl);
  angular.module('project').config(ProjectStates);


  /* Factory */
  function Project($resource){
    return $resource('app/rest/projects/:id', {}, {
      'query': { method: 'GET', isArray: true},
      'get': { method: 'GET'}
    });
  };

  /* Controller */
  function ProjectCtrl(Project){
    var model = this;
    /* No access to anything that's resolved */

    model.message = "World";
  };

  ProjectCtrl.resolve = {
    projectResolver: function(Project, $q){
      return Project.query();
    }
  }


  /* Routes */
  function ProjectStates($stateProvider, $urlRouterProvider, $translateProvider, USER_ROLES) {
    /* Default state and parent to all project states */
    $stateProvider.state('project',{
      url: "/project",
      templateUrl: "views/projects.html",
      resolve: ProjectCtrl.resolve
    });    
  };


})();

最佳答案

您可以通过依赖注入(inject)使用查询结果:

function ProjectCtrl(Project, projectResolver){
  var model = this;

  // now use your queried result, e.g.
  model.projects = projectResolver;

  model.message = "World";
};

但这仅在您在状态对象中定义 Controller 和controllerAs属性时才有效:

$stateProvider.state('project',{
  url: "/project",
  templateUrl: "views/projects.html",
  resolve: ProjectCtrl.resolve,
  controller: "ProjectCtrl",
  controllerAs: "vm"                                                  
});

现在 Html 应该如下所示:

...
<body>
    <ui-view>
</body>
...

views/projects.html 文件可能类似于以下内容:

<h1>Hello {{vm.message}}!</h1>
<ul><li ng-repeat='project in vm.projects' ng-bind='project.name'></li></ul>


这是working demo

关于javascript - 固执己见的 Javascript,传递解析器不起作用(ui-router),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26897140/

相关文章:

java - 在单页 Web 应用程序中的 Angular route 单击链接时如何触发或执行 http 服务?

javascript - 在 Google map v3 中切换天气层

javascript - 如何运行 onload 函数,然后从 onclick 事件再次调用它

javascript - 如何更改#new-quote :before background using JQuery or JavaScript?

angularjs - Angular 用户界面路由器不起作用

angularjs - 如何在不重新加载 ui-view 的情况下更新 $stateParams? Angular ui路由器

authentication - 在继续 AngularJS 测试之前, Protractor 不等待登录重定向,有什么建议吗?

javascript - 根据不同div中的其他表头高度调整表头高度

javascript - 如何在 md-select inside 指令中绑定(bind)到多个

javascript - 向作用域变量 AngularJS 插入和读取 JSON 数据