我正在開發angularjs應用程序,應該可以使用「addins」進行擴展。在簡化的情況下,插件只是一對js + html文件。每個插件應該有一個或多個控制器和一個或多個工廠。 下面是與一個控制器和一個工廠加入的示例:在angularjs中動態加載控制器+工廠
JS:
angular.module('addins.basic', [])
angular.module('addins.basic').factory('BasicAddinFactory', [BasicAddinFactory]);
function BasicAddinFactory()
{
var fact =
{
Invoke: function()
{
console.log('BasicAddinFactory.Invoke');
},
GetClients: function()
{
return ["aa", "bb"];
}
}
return fact;
}
angular.module('addins.basic').controller('BasicAddinController', ['$scope', 'BasicAddinFactory', BasicAddinController]);
function BasicAddinController($scope, $injector, addin)
{
//var injector = angular.injector(['ng', 'addins.basic'])
//var addin = injector.get('BasicAddinFactory');
$scope.expr = 'BasicAddinFactory: ' + addin.GetClients()[0];
}
HTML:
<div ng-controller="BasicAddinController">
<input type="text" ng-model="expr">
<span>{{ expr }}</span>
</div>
加載的加載項動態未使用的技術的問題廣泛在互聯網上描述的:通過向DOM添加JS腳本和HTML。一切都加載好,直到我嘗試注入BasicAddinFactory對BasicAddinController的依賴。這樣做後,我在動態加載過程中出現錯誤:未知提供者:addinProvider < - addin。
有趣的部分是,如果我沒有明確注入依賴項,那麼一切都會正常加載,我甚至可以通過使用上面示例中的註釋代碼從控制器(或從加載「插件」的父代碼)訪問工廠實例。但這很難看,我不想這樣。
如果有人能指出我的錯誤在哪裏,我將不勝感激。
謝謝。
UPDATE:Sample plunk
謝謝回覆。不幸的是,事實並非如此。添加控制器中未使用的服務不會改變任何內容。如果它們被正確注入 - 它們不會破壞它的「編譯」。 – Amid 2014-11-09 07:46:01
這並不是說它們沒有被使用,而是依賴數組的順序很重要。一個例子:http://jsfiddle.net/TwoToneBytes/022mnqzp/3/ – 2014-11-09 07:57:10
對不起。當我準備stackowerflow的代碼時,這只是一個錯字。下面是一個說明問題的概念:[sample](http://plnkr.co/edit/vys1yhNQYA8ejZMSXSS9?p=preview)。嘗試刪除那裏注射到工廠,它工作正常。 – Amid 2014-11-09 08:30:27