Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 覆盖控制器中的$scope不会反映在DOM中_Angularjs_Angularjs Scope - Fatal编程技术网

Angularjs 覆盖控制器中的$scope不会反映在DOM中

Angularjs 覆盖控制器中的$scope不会反映在DOM中,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我试图将整个作用域持久化到一个服务,以便在用户离开并返回到屏幕后,该服务可用并已经设置好 我已经创建了一个服务,并将当前范围存储在那里。后来,我使用存储在我的服务中的变量设置了传入控制器的$scope变量,但是在检查DOM之后,我发现它的绑定范围仍然是替换之前存在的范围对象 如何替换作用域,使其也用于DOM元素 谢谢你的帮助! 下面的代码尝试查看局部范围变量是否已初始化,如果已初始化,则将$scope设置为它,否则将继续并正常连接。this.scope是在控制器的超类(未显示)中定义和设置的成员

我试图将整个作用域持久化到一个服务,以便在用户离开并返回到屏幕后,该服务可用并已经设置好

我已经创建了一个服务,并将当前范围存储在那里。后来,我使用存储在我的服务中的变量设置了传入控制器的$scope变量,但是在检查DOM之后,我发现它的绑定范围仍然是替换之前存在的范围对象

如何替换作用域,使其也用于DOM元素

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


这行不通。范围是有线深入内部的角度。为了让您了解任何元素,您可以调用:

angular.element(someDomElement).scope();
并得到它的范围。它真的不能像您尝试的那样替换作用域。但是更直接的问题是你只是覆盖了那个特定的变量。这是传入的对象。假设您有以下代码:

var myObject = { a: 1 };
function f(obj) {
  obj = { a: 2 };
}
f(myObject);
显然,这不会改变myObject。它将替换函数中的
obj
,但作用域是为视图中的所有表达式设置的(例如,在任何作用域函数中都是
this
)。你需要一次又一次地改变它,我看不出有什么办法可以做到这一点。

你可以试试:

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

这将把
This.scope
中的值合并到
$scope
中,而无需替换变量。

是的,有道理……我已经开始在范围内保存一个对象。谢谢汉克斯,这是个好主意。我确实已经克服了这一点,但将来会记住这一点。
if (this.scope.hasBeenInitialized) {
    angular.extend($scope, this.scope);
    return;
}