簡體   English   中英

我不明白為什么$ rootScope可以工作,但在這種情況下不能$ scope

[英]I don't understand why $rootScope works but not $scope in this case

我有一個角度應用程序,它將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>

有什么提示嗎?

正如@deceeze指出的那樣,$ rootScope起作用但$ scope不能起作用的原因僅僅是因為在使用ui-router ,控制器綁定到ui-view 因此, $scope不會覆蓋任何超出此$scope 但另一方面, $rootScope是全局的,它涵蓋了ng-app

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

將您的控制器放在<html>它也將與作用域一起工作。因為$ scope在其控制器中可用,而$ rootScope對於完成應用程序是全局的。

感激不盡 ,當您添加“ ng-app”標簽時,Angular會為您提供$ rootScope。 當您創建控制器時,Angular會給您一個$ scope。

最好創建小型控制器,然后放置在所需位置。 創建小型控制器時,可以對每個控制器使用$ scope。 在下面,我創建了兩個控制器,一個用於處理抬頭,另一個用於處理我的身體。 scopeVar ”變量將在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 ='foo'。 使用$ broadcast和$ emmit服務可以做到這一點。 例如:

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

在應用程序的RUN配置中,您可以收聽:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM