2013-03-29 65 views
3

一個類似的問題被要求here但它沒有幫助我。angularjs控制器執行兩次

我正在學習angularjs,我注意到控制器被執行兩次。

我有一個非常簡單的小提琴的例子,顯示here

我建的例子的行爲,因爲我是學習服務,起初我還以爲是服務到控制器的注入,但我評論所有與服務相關的代碼,並且控制器仍然執行兩次。

我的例子有效,但我恐怕我做錯了什麼。

<div ng-app="MyApp"> 
    <div ng-controller="MyCtrl"> 
    {{data1}} 
    </div> 
</div> 

var app = angular.module('MyApp', []) 
app.service('Service1', function(){ 
    return { 
    ajxResponse1: 'dataFromService1' 
    }; 
}); 

function MyCtrl($scope, Service1){ 
    alert('Entering MyCtrl'); 
    $scope.data1 = Service1.ajxResponse1;  
    alert('Exiting MyCtrl'); 
} 

回答

4

因爲角被引用兩次(通過框架一旦&擴展下拉和另一個作爲外部資源)你的控制器是在撥弄運行兩次。

看到這個updated fiddle在那裏我刪除了外部資源並且警報只顯示一次。

代碼保持不變:

function MyCtrl($scope, Service1, Service2, Service3){ 
    alert('Entering MyCtrl'); 
    $scope.data1 = Service1.ajxResponse1; 
    $scope.data2 = Service2.ajxResponse2; 
    $scope.data3 = Service3.ajxResponse3; 
    alert('Exiting MyCtrl'); 
} 
+0

謝謝Gloopy我也是新來撥弄。 。 – user2223142

24

一個可能的來源是這樣的:如果你正在使用路由和指定路線控制器 - 你不能在該路由使用模板指定。當我們忽略這個問題時,我們遇到了這個問題

+1

很大的呼喊,這正是我的問題 – iancrowther

+0

你的意思是不要在模板HTML中添加'ng-controller ='我有同樣的問題 –

+0

好吧,看起來像是問題... –

1

我有一個類似的問題,這是由於我的路由斜線。

我有類似於/ post {slug:[a-z0-9 - ] * /}的路線,並且在domain.com/post上訪問該頁面時,它會重定向到帶有斜線的版本。

花了我好幾個工作吧!

編輯: 其實,只是更仔細地看看你的代碼,並注意到那裏沒有路由,所以這可能不是你的情況的原因。

對於像我這樣尋找不同解決方案的人可能會有用。

+0

你是如何解決這個問題的? –

0

對於所有使用軌道和angularjs人:

Rails框架是URL映射到的意見並加載它們甚至當你有一個單一的視圖應用的angularjs $路線相撞。

爲了防止控制器的雙載: 去的application.js和刪除「// =需要turbolinks

不客氣