Javascript 为什么ng bind没有';t显示通过ng单击设置的rootScope中的值

Javascript 为什么ng bind没有';t显示通过ng单击设置的rootScope中的值,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我想在$rootScope中存储一个变量。当我有这样的结构时,一切正常,第二个div显示值: <html ng-app> ... <body> <button ng-click="$rootScope.pr = !$rootScope.pr"></button> <div ng-class="{some:$rootScope.pr}">{{$rootScope.pr}}</div> </bo

我想在
$rootScope
中存储一个变量。当我有这样的结构时,一切正常,第二个div显示值:

<html ng-app>
  ...
  <body>
    <button ng-click="$rootScope.pr = !$rootScope.pr"></button>
    <div ng-class="{some:$rootScope.pr}">{{$rootScope.pr}}</div>
  </body>

...
{{$rootScope.pr}
但当我有这样的结构时:

<body>
    <div class="root-scope-value-1">{{$rootScope.mobileMenuCollapsed}}</div>
    <div class="content-wrapper" ng-controller="MainController">
        <nav class="navbar navbar-custom navbar-fixed-top" role="navigation">
            <div class="container">
                <div class="navbar-header">
                    <div class="root-scope-value-2">{{$rootScope.mobileMenuCollapsed}}</div>
                    <button ng-click="$rootScope.mobileMenuCollapsed = !$rootScope.mobileMenuCollapsed">

{{$rootScope.mobileMouCollapsed}
{{$rootScope.mobileMouCollapsed}

类为
root-scope-value-2
的div显示了
$rootScope.mobileMoucollapsed
,但类为
root-scope-value-1
的div不显示DOM中的值。为什么会这样?

您不必在视图中使用
$rootScope
,范围会隐式绑定到视图(即使在
控制器As
语法的情况下,别名也会成为
$scope
上的一个属性,该属性具有控制器实例引用的值)。除了独立作用域(
$scope.$new()
)之外的所有作用域(
$scope.$new(true)
)最终都是从rootscope继承的,因此您将使rootscope上可用的属性在作用域上自动可用。因此,这里控制器
MainController
的作用域继承自根作用域


更好的做法是,始终将对象的属性放置在根范围上(如plunker中),这样当您从子范围对属性(根范围上对象的属性)进行任何更改时,更改也会反映在父范围上,因为它们都指向相同的引用。

只需从视图中删除
$rootScope
$作用域是隐式的……是的,它现在正在工作:)。谢谢你能就这个建议发表意见吗?也许是一个答案?当然添加了thx,看看这基本上是否有意义,因为
ng controller
创建了新的作用域此作用域具有angular在其上创建的
$rootScope
属性,而对于
root-scope-value-1
而言,
rootScope
属性是在
rootScope
上定义的,正确吗?@Maximus是在这种情况下为控制器创建的作用域是典型地从rootscope继承的。如果您有一个封装此控制器的控制器,则此控制器将从上面的一个控制器原型继承,并最终从rootscope继承。。看看这个例子,这里有一个很好的答案是的,明白了。谢谢