Ich verwende "require", um zu vermeiden, dass alle Controller zur Laufzeit geladen werden. Aber in meinem Fall alle Controller geladen werden, wenn Anwendung starts.Here mein CodeSo vermeiden Sie, dass alle Controller zur Laufzeit geladen werden
App.js
define(['angular',
'angular_route',
'loginController',
'modifierController',
'bootstrap_ui_tpls',
'xeditable'
],function(Angular){
Angular.module('App',['ui.router','App.loginCtrl','App.modifierCtrl'])
.config(['$stateProvider','$urlRouterProvider',
function($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise('/validIcd');
$stateProvider
.state('login',{
url:'/login',
views:{
'':{
templateUrl:'templates/login/loginView.html',
controller:'loginCtrl',
},
'[email protected]':{
templateUrl:'templates/assets/loginNavBar.html'
}
}
})
.state('modifier',{
url:'/modifier',
views:{
'':{
templateUrl:'templates/master/masterView.html',
},
'[email protected]':{
templateUrl:'templates/assets/navBar.html'
},
'[email protected]':{
templateUrl:'templates/assets/sideBar.html'
},
'[email protected]':{
templateUrl:'templates/modifier/modifier.html',
controller:'modifierCtrl'
}
}
})
ich geschaffen habe alle meine Controller in separaten Modulen und enthalten es in Hauptmodul.
loginController.js
define(['angular'], function(angular){
angular.module('App.loginCtrl', [])
.controller('loginCtrl',function($scope,$window,$http,appConfig){
$scope.authenticate=function(Username,password)
{
var inputparam ={
sUserName: Username,
sPassword: password
}
$http({
method:'POST',
url:appConfig.rootUrl+'login',
data:angular.toJson(inputparam)
})
.then(function successcallBack(response){
$scope.login=true;
var session = response.data;
localStorage.setItem('sessionid',session.sSessionId);
$window.location.hash="#Modifier"
},function errorCallBack(response){
$scope.login=false;
if(response.data===null)
{
$scope.errorMessage="Network Error"
}
else if (response.data === 6) {
$scope.errorMessage="Authentication failed";
}
else
{
$scope.errorMessage="Invalid Login";
}
});
}
});
});
modifierController.js
define(['angular'], function(angular){
angular.module('App.modifierCtrl', ['xeditable'])
.controller('modifierCtrl',
function($scope,$http,$window,appConfig,appService){
if(appService.checkSession())
{
$scope.fetchModifier = function()
{
$scope.isData=false
$http({
method:'POST',
url:appConfig.rootUrl+'Modifier',
headers:{
iOffset:0,iCount:10,
'sSessionId':localStorage.getItem("sessionid"),
}
})
.then(function successcallBack(response){
$scope.isData=true
$scope.ModifierArray = response.data.modifier
},function errorCallBack(response){
$scope.isData=false
});
};
$scope.updateModifier=function(modifier,code)
{
var modifier={
id:modifier.id,
sModifierCode:code,
sModifierDesc:modifier.sModifierDesc
}
$http({
method:'put',
url:appConfig.rootUrl+'modifier',
headers:{
'sSessionId':localStorage.getItem("sessionid"),
},
data:angular.toJson(modifier)
})
.then(function successcallBack(response){
var data = response
},function errorCallBack(response){
var error = response
});
}
}else
{
$window.location.hash="#login"
}
});
});
Seine Arbeit jetzt perfekt, aber mein Ziel ist es, alle Controller erstmals zu vermeiden Laden und nur laden sie benötigt, wie sie benötigt werden. Ich bin mir nicht sicher bin auf dem richtigen Weg ..
Ich hoffe, dass der Modifikator-Controller nur geladen werden sollte, wenn die Route ändert. das ist "/ modifier"
Kann jemand mir eine bessere Lösung vorschlagen, wenn ich etwas Ungewöhnliches gemacht habe und bitte korrigieren Sie mich, gibt es irgendwelche anderen Probleme, die Sie in meinem Code finden.
Das kann Ihnen helfen --- https://weblogs.asp.net/dwahlin/dynamically-loading-controllers-and-views-with-angularjs-and-requirejs – sreeramu
Danke ... Gibt es einen anderen Weg Controller dynamisch zu laden, indem nur die Methoden von angular verwendet werden? –