【问题标题】:Passing parent scope variables to ui-view component将父范围变量传递给 ui-view 组件
【发布时间】:2016-08-04 04:26:05
【问题描述】:

我正在使用 angular-ui/ui-router,并定义了隔离范围的指令/组件,以便在状态更改时呈现。

$stateProvider
    .state('about', {
      url: '/about',
      template: '<about></about>'
    })
    .state('blog', {
      url: '/blog',
      template: '<blog></blog>'
    })

我的主页是一个指令,它在其控制器中加载具有所有权限的用户

app.directive('main', function() {
  return {
    ...
    template: "<div><header></header><div ui-view></div></div>",
    controller: [..., function(...) {
       $scope.user = // $http load user
    }]
);

当导航到不同的状态时,我希望将用户传递给所有 ui-view 指令/组件。但是,如果没有 resolve 会在每次状态更改时加载用户或使用 $rootScope

,我找不到实现这一点的好方法

我正在寻找类似于以下内容的内容,其中用户是来自父范围的用户。

$stateProvider
    .state('about', {
      url: '/about',
      template: '<about user="user"></about>'
    })
    .state('blog', {
      url: '/blog',
      template: '<blog user="user"></blog>'
    })

知道如何做到这一点吗?

【问题讨论】:

  • 客户端在哪里输入用户名?可以将$http 获取的权限重构为服务吗?

标签: angularjs angularjs-directive angularjs-scope angular-ui-router angularjs-components


【解决方案1】:

在控制器中,你可以将用户分配给$rootScope,比如$rootScope.user = sth,然后你可以为每个状态url添加控制器来获取用户,比如$scope.user= $rootScope.user,或者传递rootScope用户作为参数。

【讨论】:

  • 我想这是一个有效的解决方案(赞成)。不过,我正在考虑将我们的 Angular 1.x 应用程序转换为 Angular 2.x,并尽量避免使用 $rootScope。
【解决方案2】:

你需要像这样在你的控制器中使用 $rootscope

$rootScope.user = sth;

你可以得到这样的用户

$scope.user= $rootScope.user;

【讨论】:

  • 正如@Stephanie 的回答所评论的那样,我不想使用 $rootScope
  • 如果您不想使用 $rootscope,那么您可以根据需要使用 $broadcast 或 $emit 向下或向上传播数据。
猜你喜欢
  • 2014-12-05
  • 2013-07-31
  • 1970-01-01
  • 2021-05-30
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
相关资源
最近更新 更多