1

我试图将整个范围保留到服务中,以便在用户离开然后返回屏幕后它可用并且已经设置。

我创建了一个服务并将当前范围存储在那里。后来我将传递给控制器​​的 $scope 变量设置为存储在我的服务中的变量,但是在检查 DOM 之后,我看到它的绑定范围仍然是替换之前存在的范围对象。

如何替换范围以便它也可用于 DOM 元素?

谢谢你的帮助!

下面的代码尝试查看本地范围变量是否已初始化,如果是,则将 $scope 设置为它,否则它将继续并正常连接它。this.scope 是在控制器的超类(未显示)中定义和设置的成员变量。

function xyzController($scope, stateService) {
    _super.call(this, $scope, stateService);                    
    if (this.scope.hasBeenInitialized) {
        $scope = this.scope;  // $scope is updated but the DOM's scope never changed
        return;
    }

    $scope.hasBeenInitialized = true;

    ...                
}
4

2 回答 2

2

你可以试试:

if (this.scope.hasBeenInitialized) {
    angular.extend($scope, this.scope);
    return;
}

这会将值从合并this.scope到您的$scope而不替换变量。

于 2013-06-26T20:04:44.503 回答
0

这行不通。Scope 在 Angular 内部很深。为了给您一个想法,在任何元素上,您都可以调用:

angular.element(someDomElement).scope();

并得到它的范围。确实无法像您尝试那样替换范围。但更直接的问题是你只是覆盖了那个特定的变量。它是一个传入的对象。想象一下你有这样的代码:

var myObject = { a: 1 };
function f(obj) {
  obj = { a: 2 };
}
f(myObject);

显然这不会改变myObject。它会在你的函数中替换obj,但是关于范围的事情是它们是为你的视图中的所有表达式设置的(例如,它是this在任何范围函数中)。你需要彻底改变它,我看不出有办法做到这一点。

于 2013-06-26T06:13:19.173 回答