我不明白为什么$ rootScope可以工作,但在这种情况下不是$ scope

时间:2016-10-31 10:26:57

标签: javascript angularjs

我有一个角度应用,将ng-app放在<html>标记内而不是正文中,这样角度范围就会覆盖<title>。但是,从角度控制器中,$scope变量无法在<title>$rootScope内输出任何内容。我不明白为什么会这样。据我所知,$scope是控制器的本地,$rootScope是全局的。但是,在这种情况下,我确保将ng-app放置在<html>标记中,以便涵盖<title>。就ng-controller而言,我并没有在我的html页面中的任何地方指定它。

<html ng-app="my-app">
<head>
    <meta charset="utf-8">
    <title>{{scopeVar}}</title>

任何提示?

3 个答案:

答案 0 :(得分:1)

正如@deceeze指出的那样,$ rootScope工作但$ scope的原因并不是因为在使用ui-router时,控制器与ui-view绑定。因此,除此之外的任何内容都不会被$scope覆盖。但另一方面,$rootScope是全球性的,涵盖ng-app内的任何内容。

答案 1 :(得分:0)

FATAL

将你的控制器放在PROBLEM它也适用于范围。因为$ scope在其控制器中可用,而$ rootScope是全局的,可以完成应用程序。

答案 2 :(得分:0)

感激,当您添加&#34; ng-app&#34;标签Angular为您提供$ rootScope。当您创建控制器时,Angular会为您提供$ scope。

喜欢创建小型控制器,然后放在您想要的位置。创建小型控制器时,可以为每个控制器使用$ scope。下面我创建了两个控制器,一个用于处理器de header,另一个用于处理我的身体。 &#34; scopeVar &#34;变量将在 controller1 中可用。

<html ng-app="my-app">
<head ng-controller="controller1">
    <meta charset="utf-8">
    <title>{{scopeVar}}</title>
</head>
<body>
    <div ng-controller="controller2">

    </div>
</body>
</html>

但是,如果您想从控制器与$ rootScope进行通信,请不要使用$ rootScope.somevariable =&#39; foo&#39;。使用$ broadcast和$ emmit服务来做到这一点。例:

$rootScope.$broadcast('event name', 'foo');

在应用程序的RUN配置中,您可以听到:

$rootScope.$on('event name', function(param1){
   // param1 will be 'foo'
   // do something
});