我有一個指令創建如下:
elements.directive('myApp', function(){
return {
restrict: 'E',
templateUrl: "/path/to/myapp.html",
controller: function($scope, $timeout) {
// loads the script when the dom has finished rendering
var loadScript = function() {
var script = document.getElementById('myappjs');
if(script){
/*
* the script is already appended but needs to be re-executed
* - remove and re-append the script element?
* - $route.reload() in order to refresh the page?
* - other solutions
*/
} else {
// the script has never been loaded before and the script element is created from scratch
var s = document.createElement('script');
s.id = "myappjs";
s.src = '/path/to/require.js';
s.setAttribute('data-main', '/path/to/script'); //.js needs to be omitted
document.body.appendChild(s);
}
};
// when the DOM has finished rendering, loadScript is executed:
$timeout(loadScript, 0);
}
};
});
「我的應用程序內」元素是NG-內的推杆開關容器。基本上它會加載一個svg和腳本來執行它。 問題是,腳本只在ng-switch第一次匹配'my-app'元素時執行:如果我從另一個指令(總是在ng-switch容器內)切換到「my-app」,它就可以工作。 但是,如果我再次移動到另一個指令,然後再次移動到「我的應用程序」,腳本不再工作。
我試圖使用$ route.reload(),當它發現腳本之前已經被追加,但它會導致無限循環。 然後我嘗試從DOM中刪除腳本元素並重新附加它,但腳本無論如何都不加載。
因此,svg的內容僅在第一次加載頁面時加載。 有沒有人有任何建議?
爲什麼不將任何值傳遞給作用域並操縱指令中的數據? – 2014-11-20 19:51:26
最後,我通過在運行函數中包裝外部JS的所有代碼來解決問題。第一次在外部文件本身內執行。然後,每當ng-switch匹配指令時,它都會在指令內執行。 – user2861867 2014-11-21 11:08:41
感謝分享! – 2014-11-21 13:19:57