【问题标题】:Angular scope singleton角度范围单例
【发布时间】:2016-02-04 14:39:36
【问题描述】:

我有这个控制器:

class Ctrl{
  constructor($http, $scope, $stateParams){
    if(!$scope.items){
      $http.get(...).then((res)=> {
        $scope.items = res.data;
      });
    }

    if($stateParams.id){
        $scope.currItem = $scope.items[$statePrams.id];
    }
}

我有两种状态:

.state('dashboard.items', {
    url: '/items',
    templateUrl: 'items.html',
    controller:'Ctrl'
})
.state('dashboard.items.details', {
    url: '/:id',
    templateUrl: '/ItemDetails.html',
    controller: 'Ctrl'
})

在显示其中一个的详细信息之前,我想确保 items 数组已经初始化。

如何不重复代码? (如果 else 和每个内部的代码相同)

谢谢。

【问题讨论】:

  • .state 对象文字中使用 resolve 方法来延迟控制器 github.com/angular-ui/ui-router/wiki#resolve 的实例化
  • 我用resolve试过了,但是列表页面需要很长时间才能加载。我想显示列表页面,异步加载列表,然后加载下一个状态。

标签: javascript angularjs angular-ui-router singleton angular-promise


【解决方案1】:

您可以在父级别使用状态 resolve(这是您问题的确切答案)

或者只是使用服务并在那里进行初始化。服务是单例的。

【讨论】:

  • 我已经做到了。问题是现在我的列表页面只有在列表初始化后才会加载。我想加载列表页面,然后加载列表项。无论如何,如果我将为孩子使用另一个控制器,有一种方法可以从孩子访问父控制器吗?
  • 看第二个选项
  • angular-ui-route 有办法访问父控制器吗? (在我的 ES6 案例中没有范围)
猜你喜欢
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
相关资源
最近更新 更多