私はAngularJSアプリケーションでコントローラを動的に追加しようとしています。 サブドメインでは、私はanotherController.js
ファイルを持っています。
function anotherControllerWrapper() {
return ['$scope', '$state', function ($scope, $state) {
$scope.doWork = function() {
//...doing some work...
alert('work done');
};
$scope.doWork();
}];
};
runtimeController
プロバイダは、実行時に$controllerProvider
を使用することができるようにする::
はここanotherController.js
内容だ私は「
app.config(function($controllerProvider, runtimeControllerProvider) {
runtimeControllerProvider.setControllerProvider($controllerProvider);
});
:
app.provider('runtimeController', function() {
var controllerProvider = null;
this.setControllerProvider = function (cp) {
controllerProvider = cp;
};
this.$get = function() {
return {
registerController: function (controllerName, controllerConstructor) {
if (!controllerProvider.has(controllerName)) {
controllerProvider.register(controllerName, controllerConstructor);
}
}
};
};
});
ここではアプリケーションのconfig
セクションですm(他のコントローラの中で)httpを介してコントローラのコードを受信すると、s Oそれは次のようになります。
app.controller('testController', ['$scope', '$state', '$http', 'runtimeController',
function ($scope, $state, $http, runtimeController) {
$http.get('http://someUrl/anotherController.js')
.then(
function(sucess){
var evaluated = new Function('return ' + success.data)();
var ctrl = evaluated();
// routing to ui state with specified 'anotherController' works
// no 'anotherController' in app._invokeQueue
runtimeController.registerController('anotherController', ctrl);
// routing to ui state with specified 'anotherController' constanly fails
// 'anotherController' appears in app._invokeQueue
//app.controller('anotherController', ctrl);
//--registering new UI route with 'anotherController' as controller here
$state.go('anotherState');
},
function(error){ alert('something went wrong!'); },
);
}]);
宇井状態も後、私はコントローラを追加している、dymanically追加されます。
$controllerProvider.register
とmodule.controller
の間に何が起こっているのかを教えてもらえますか?
これは私が探していたものです。 'eval'に関して - 私はそれを使用しました。なぜなら、正確なスクリプトが何であるかを予測することができないからです。ログイン後にCDNからダウンロードするファイルのリストを受け取ります。 ocLazyLoadに関するアドバイスをいただきありがとうございます - 一見します! – Overrided
ようこそ。スクリプト本体で置き換え(例えば '.controller'を' .config' - APIのパッチを当てることで処理できる)しない限り、evalは必要ありません。$ .getScript、またはSystem.importでスクリプトを読み込むことができます基本的には