首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从另一个作用域变量中设置$scope变量

如何从另一个作用域变量中设置$scope变量
EN

Stack Overflow用户
提问于 2015-02-16 09:32:57
回答 2查看 522关注 0票数 0

我有以下代码,并且在承诺(在本例中是一个$scope请求)完成后,我试图设置一个$http变量的值。代码如下所示:

代码语言:javascript
运行
复制
.controller('NewItemCtrl', function ($scope, $state, LabelFactory) {

  $scope.createItem = function (item) {
    LabelFactory.createLabel(item)
      .then(function (response) {
        $scope.label = response.data;
        $scope.thing = 'These are things';
        $state.go('tab.newitem-label');
        console.log($scope.label);  
      });  
  };
})

虽然我能够正确地记录$scope.label,但是当我在我的模板中查找那个项目( NewItemCtrl是控制器)时,什么都没有。这就好像我从来没有发送过它,尽管它显然有一个价值。

有人能向我解释如何从另一个范围内设置A.属性的值,或者B.实现相同目标的最佳实践吗?

EN

回答 2

Stack Overflow用户

发布于 2015-02-16 09:58:45

之所以发生这种情况,是因为您要进入另一种重新创建范围对象的状态。

实现这一目标的一种方法是使用分层状态。子作用域可以访问其父状态的作用域。由于要使用“tab.newitem-label”,如果在进入新状态之前处于状态“tab”,那么将label设置为tab状态范围就足以从tab.newitem访问它。

我相信你在使用ui-router。然后,您可以将此标签作为现有状态的一部分。参数化值可以通过$stateParams访问。因此,您可以使用以下语法将参数传递到新状态,而不是转移到$state.go('tab.newitem-label');:然后,您可以在控制器中使用$stateParams.labelId访问labelId参数,在创建控制器之前,您可以使用状态的labelId by resolve特性检索标签。Resolve功能帮助您在实例化控制器之前检索日期。然后,您可以将解析的数据注入控制器,类似于向控制器注入服务。

您可以这样定义这样的状态:

代码语言:javascript
运行
复制
.state('tab.newitem-label', {
        url: '/:labelId',
        templateUrl: 'partials/yourpage.html',
        controller: 'NewStateCtrl'
        resolve: {
          label: ['labelService', '$stateParams', function (labelService, $stateParams) {
            return labelService.retrieveLabelFromLabelId($stateParams.labelId);
          }]
        }
      })
票数 1
EN

Stack Overflow用户

发布于 2015-02-16 09:51:17

您可以在{$scope.label}上放置一个手表,并查看新的值更新是否触发了executes.once函数,确认更新正在触发手表,使用该函数更新使用{$scope.label}的所有位置/控制器(可能使用$emit/$广播)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28538288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档