2013-05-22 68 views
4

我想通過點擊一個JS書籤來製作一個angularjs應用程序。用js製作一個角度應用程序書籤

的問題是NG-控制器不受角度認識並拋出這個錯誤:

 
Error: Argument 'LDController' is not a function, got undefined 

首先,我定義NG-應用,並使用angular.module具有相同的名稱,這個工作,我得到<html ng-app="bookmarklet">。 然後我通過application.js的名稱加載一個外部文件。在這個文件中定義了app.controller('LDController', ..)

我在做什麼錯了?這裏是js書籤代碼:

 
function loadApp() { 
    document.getElementsByTagName('html')[0].setAttribute('ng-app', 'bookmarklet'); 

    var div = document.createElement('div'); 
    div.setAttribute('ng-controller', 'LDController'); 
    div.innerHTML = ''; 
    document.body.appendChild(div); 

    var js = document.createElement('script'); 
    js.innerText = "var app = angular.module('bookmarklet', []);"; 
    document.body.appendChild(js); 

    js = document.createElement('script'); 
    js.setAttribute('src', 'http://example.org/js/application.js'); 
    document.body.appendChild(js); 
} 

(function() { 
    if (typeof angular === 'undefined') { 
    js = document.createElement('script'); 
    js.setAttribute('src', 'https://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular.min.js'); 
    js.onload = loadApp; 
    document.body.appendChild(js); 
    } 
    else { 
    loadApp(); 
    } 
}()); 
+0

角度對待'script'標記,而特製。你有沒有看過討論[這裏](https://groups.google.com/forum/#!topic/angular/H4haaMePJU0/discussion)伊戈爾在談論如何包含jQuery可以幫助? –

+0

嗯現在我通過使用來自https://github.com/szabyg/vie-annotation-bookmarklet/blob/gh-pages/loader.js的loadScripts得到了錯誤 但現在app.run函數不起作用不管怎樣,我按以下順序加載js文件:angular.min.js,init.js,service.js,controller.js - >這是我的init.js和app.run http://linkedmovie.hp.af。 cm/js/init.js - 其中有2個console.log,第一個(app)使得輸出成爲app.run中的第二個不是......爲什麼是這樣? –

+1

我一直在想,你正在通過添加'ng-app'指令來手動初始化Angular。這樣做的規定方法是不要插入'ng-app',而是在所有其他設置完成後在適當的元素上調用'angular.bootstrap'。例如: angular.element(document).ready(function(){angular.bootstrap(document,['bookmarklet']);} 你能試試嗎?有更多的信息[這裏](http: //docs.angularjs.org/guide/bootstrap) –

回答

3

我一直在想,你是通過添加ng-app指令手動初始化角。這樣做的規定方法是不要插入ng-app,而是在設置其他所有內容後調用angular.bootstrap。因此,例如:

angular.element(document).ready(function() { 
    angular.bootstrap(document, ['bookmarklet']); 
} 

有更多的信息here

相關問題