2014-01-16 31 views
9

我的代碼一直在工作,直到我開始使用ng-include。現在,每當我去使用這個指令的頁面時,我都會被卡在頁面上。後退按鈕已停止工作,並且您永遠停留在同一頁面的循環中。AngularJS ng-include do HistoryJS停止工作

HTML 「主機」

<div id="place"> 
    <div data-ng-include="'/app/angular/views/place.html'"></div> 
</div> 

HTML place.html

我的網站與Asp.NET MVC 5.

我的代碼的某些位運行 ​​

JAVASCRIPT

$scope.place = { }; 

// 'maps' is a google maps plugin 
maps.autoComplete({ success: function(result) { 
    // gets the result of the user search 
    History.pushState({ name: result.name, id: result.id }, result.name, '/place/' + result.id); 
}); 

History.Adapter.bind(window, 'statechange', function() { 
    var state = History.getState(); 

    // go to the server and get more info about the location 
    $mapService.getMetaInfo({id: state.data.id}).then(function (d) { 
     // get place info 
     $scope.place = d; 
    }); 
}); 

當我刪除了ng-include並用 「原始」 HTML取代它,它工作正常。這個「無限循環」僅在添加ng-include時發生。

+3

我想你應該展示你如何使用'ng-include'指令,並且如果你正確地使用它,你應該提供一個能夠重現問題的重調器。 – Stewie

+0

您應該將任何外部插件轉換爲Angular指令,爲DOM操作混合兩個不同的範例並不明智。 –

+1

我無法想象任何人這樣做。如果它是一個簡單的插件,我會同意你的看法,但是,**任何插件......它太重了,你不覺得嗎? –

回答

0

我遇到過這個問題一次, 它似乎是Html5模式。

嘗試添加到您的應用程序配置如下:

$locationProvider.html5Mode(false); 
0

把你的代碼中的setTimeout因爲當你使用NG-包括幾毫謝勝利,需要加載HTML和追加到已經NG-包括股利。

setTimeout(function{ 
// write your code here 
},100) 
+0

認爲回調比超時更​​可靠。如果網絡延遲使請求持續101毫秒或200秒,會怎麼樣?也許你可以得到這個請求的承諾,並通過一個成功的回調。 – Trevor

1

當您設置內部ng-include指令模板的URL,指定模板得到由角稱爲然後把它放在角度$templateCache,然後這些內容獲取上呈現的視圖。如果下一次直接從角度$ templateCache獲取它,則調用它。我寧願你把模板放在templateCache的角度run階段(在角度運行它的編譯週期之前)。 我建議你在角度啓動時加載模板。

將這個模板您的角度$templateCache內裝載的角度在頁面上(即右後角配置相)

CODE

angular.module('app',[]). 
config(function(){ 
    //configuration code will be here. 
}). 
run(function($templateCache,$http){ 
    //run block will run write after the config phase 
    $http.get('/app/angular/views/place.html',{ cache : $templateCache } 
}); 

這個模板後,將可從$ templateCache未做之前任何模板的ajax。

希望這不會造成任何無限循環。像你目前面臨的問題。

謝謝。

+0

@Le Coder我的回答對你有幫助嗎? –