我正在尝试将整个范围保留到服务中,以便在用户导航然后返回到屏幕后可用并已设置。
我已经创建了一个服务并在那里存储当前范围。后来我将传递给控制器的$ 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;
...
}
答案 0 :(得分:2)
你可以尝试:
if (this.scope.hasBeenInitialized) {
angular.extend($scope, this.scope);
return;
}
这会将this.scope
的值合并到$scope
而不替换变量。
答案 1 :(得分:0)
这不起作用。范围是在Angular内部连接的。为了让您了解任何元素,您可以致电:
angular.element(someDomElement).scope();
并获得其范围。它真的无法像你想要的那样替换范围。但更直接的问题是你只是覆盖了那个特定的变量。这是一个传入的对象。想象一下,你有这个代码:
var myObject = { a: 1 };
function f(obj) {
obj = { a: 2 };
}
f(myObject);
显然,这不会改变myObject
。它将替换函数中的obj
,但关于范围的事情是为视图中的所有表达式设置它们(例如,它是任何范围函数中的this
)。你需要彻底改变它,我没有办法做到这一点。