[英]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.