0

我有一個多頁面的AngularJS Web應用程序,用作分析儀表板。我目前使用$ scope創建變量,所以我可以在HTML頁面上動態顯示一些數據。無論創建$ scope變量,無論用戶訪問哪個頁面,都將是全局變量,我只想將變量限制在其頁面和頁面中。由於我是Angular的新手,我不知道如何做到這一點。關於我能做什麼的任何想法?

回答

4

$ scope變量不是全局的;它們是特定於控制器的。如果您想要每個頁面特定的變量,請在每個頁面上放置一個控制器(並且不要將控制器添加到父元素,因爲其範圍將被繼承)。

1

爲每個頁面創建單獨的控制器。 $範圍在nt全局。它的範圍僅限於它的控制器

1

$scope基於控制器上,所以做出具體到一個頁面的東西做這樣的事情:

var app = angular.module('app', []); 

app.controller('pageOne', ['$scope', function ($scope) { 
    $scope.forThis = "value for page one controller"; 
}]); 

app.controller('pageTwo', ['$scope', function ($scope) { 
    $scope.forThis = "value for page two controller"; 
}]); 

http://jsfiddle.net/Lzpp3ve3/

+0

因爲海報的印象是$ scope是全局的,所以很有可能他有一個控制器連接到一個非常高級的元素(比如''),它的'$ scope'屬性幾乎被繼承每隔一個元素。他還需要擺脫這一點。 –

+0

@AlvinThompson,是的,它只是將範圍放在與他的頁面相關的正確控制器中。 –

+0

我爲每個頁面都有一個控制器。出於某種原因,我的印象是$範圍在全球範圍內持有價值。我剛剛進行測試,它的工作原理就像你們所說的那樣!謝謝:) – Niraj

0

是的,你需要調用controllerAs語法。無論您是在路由中還是在HTML元素中執行此操作都不相關。但是這可以讓你在Angular中使用命名空間。在下面的例子中,我假設你在HTML元素上調用ng-controller指令。

你的HTML是:

<div ng-controller="MyController as my"> 
    {{my.var}} 
</div> 

而且您的控制器將

.controller("MyController", function() { 
    this.var = "hello world"; 
} 

這已經因爲角1.3.X實現,如果我是正確的。 $ scope實際上是污染性的,因爲它增加了原型繼承鏈控制器的使用。即子控制器從父母繼承$範圍變量。

相關問題