2016-11-25 65 views
0

我希望我能處理這個,但方式不好......即我需要使用$cookieStore來檢查函數調用與否。如何讓angularjs控制器只運行一次,即使在DOM中定義了許多ng控制器?

每次使用push數組,然後我需要使用$cookieStore。但它似乎不實際。

這裏是我的DOM:

<div ng-controller="MyCtrl"> 
    <div> 
    <div ng-include="'temp2.html'"> 
    Hello, {{name}}! 
    </div> 
    </div> 
</div> 

<script type="text/ng-template" id="temp2.html"> 
    <div ng-controller="MyCtrl">Another View</div> 
</script> 

而且我angularjs控制器:

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

//myApp.directive('myDirective', function() {}); 
//myApp.factory('myService', function() {}); 

function MyCtrl($scope) { 
    $scope.name = 'Superhero'; 
    alert(1); 
} 

alert(1)函數將被調用2次,每次倍的頁面被調用。

如何在不使用監視器的情況下避免此問題?

我的fiddle爲了您的方便。謝謝!

+0

你使用兩次相同的控制器,所以它爲兩個div實例化兩次。這是你如何使用它? – Viplock

+0

由於控制器無法理解ng-include中的哪些視圖,我需要調用它兩次。 – Nere

+0

不,你的看法可以理解它應該遵循哪個控制器 – Viplock

回答

0

控制器將呼籲雙方的觀點是兩次,我建議你移動controller特定的代碼來init功能,在您的views的一個使用ng-init

var Controller = function($scope) { 
    $scope.init = function() { 
    }; 
}; 

你查看

<div ng-controller="Controller" ng-init="init()"/> 
+0

好的,我想先嚐試。感謝您的迴應。 – Nere

+1

@Imran:cool ..在你的一個視圖中,你可以使用ng-init,而在其他你可以避免的情況下,通過保持這一點,你可以確保某些代碼不會在你的視圖中初始化,儘管可用。 – Thalaivar

+0

如何實現你的代碼?我不知道如何使用它。你能在這個小提琴上展示我嗎? http://jsfiddle.net/imranhamzah/Lvc0u55v/12581/ – Nere

0

喲不需要再次指定控制器名包括....如果同父一個(與主網頁的控制器) 。

只是這個

<div ng-controller="MyCtrl"> 
    <div> 
    <div ng-include="'temp2.html'"> 
    Hello, {{name}}! 
    </div> 
    </div> 
</div> 

<script type="text/ng-template" id="temp2.html"> 
    <div>Another View {{name}}</div> 
</script> 

Js Fiddel

去將你列入視圖訪問。

希望它能幫助你..