我目前具有angularJS問題單獨服務(或我對它的理解 - 我來自一個C#背景)
我的工作一個需要動態創建元素的項目(從被拖放到頁面上的後果克隆)。一旦這些元素被刪除,我希望他們能夠被雙擊並出現模式。我給他們一個自定義指令(openmodal),然後通過角度編譯服務運行它們。
這一切的偉大工程......
不過,我需要他們能夠訪問服務(我有一個服務作爲代理對象的列表),但正在通過$編譯服務運行後他們無法訪問相同的對象。我正在使用angular.injector方法來獲取當前角度應用程序的編譯服務,所以我不明白爲什麼它不使用同一個服務實例(當上面的元素運行時,會創建一個新的服務實例$編譯)。
我確定它是我理解它/範圍工作的一個問題。然而,我發現這非常難以搜索,因爲在聲明一個指令(包含編譯和鏈接函數)時也使用了「compile」這個詞,並且它們是最顯示的鏈接。
這是一個plunk展示我的問題。如果單擊「添加數字」按鈕幾次(兩個指令將顯示與使用相同服務相同的數字),但是在單擊「創建指令」並單擊「單擊以顯示模態」後,模式會顯示數組長度爲0.
我很確定它與我從javascript創建模式的方式有關。
function CreateModalDirective() {
var compileService = angular.injector(['ng', 'numbersApp']).get('$compile');
var scope = angular.element("#divForModal").scope();
console.log(scope);
var element = '<div id="theModalContainer" openmodal ng-click="OpenMyModal()">Click to show the modal</div>';
var linkFn = compileService(element);
var content = linkFn(scope);
angular.element('#' + 'divForModal').append(content);
}
的「FirstController」和「SecondController」只是表明它們正在使用相同的服務,對「ModalController」的randomId參數只是證明了我能夠通過一個數字控制器。
但是,如果不能通過「純JS函數」來做到這一點,那麼我可能不得不考慮重構以實現此功能 - 再次提示指針會很棒!
感謝提前:)
有沒有什麼辦法可以傳遞範圍內的任何對象來編譯函數而不是範圍。例如。我有$ scope.myCustomVal = {key1:「val1」};現在我想這樣使用:$ compile(elm)($ scope.myCustomVal);我想設置相同的作用域,只需渲染一個鍵,並且動態生成密鑰 – 2015-03-10 08:03:53
是的,您可以在編譯和添加屬性之前創建新的作用域。例如 var myNewScope = $ rootScope。$ new(); myNewScope.myCustomVal = {key1:「val1」}; $ compile(elm)(myNewScope); 將編譯與您剛剛創建的範圍的元素,並將「myCustomVal」添加到 – ry8806 2015-03-10 09:39:50
我不能創建新的範圍,因爲它很難銷燬。我想動態創建這樣的指令,所以它的模板將使用$ scope.myCustomVal進行渲染。我只想使用$ scope.myCustomVal的值呈現模板。有沒有辦法做到這一點? – 2015-03-10 11:07:10