AngularJS 不调用控制器
AngualrJS not invoking the controller
我的状态state.js
(function() {
'use strict';
angular.module('app').config(stateConfig);
stateConfig.$inject = [ '$stateProvider' ];
function stateConfig($stateProvider) {
$stateProvider.state('bmc', {
parent : 'entity',
url : '/bmc',
data : {
authorities : [ 'ROLE_USER', 'ROLE_ADMIN' ],
},
views : {
'content@' : {
templateUrl : 'bmc.html',
controller : 'BmcController',
controllerAs : 'vm'
}
}
}).state('list', {
parent : 'bmc',
url : '/list/:routeId/:entity',
data : {
authorities : [ 'ROLE_ADMIN', 'ROLE_USER' ],
},
views : {
'fieldContent@' : {
templateUrl : 'list.html',
controller : 'ListController',
controllerAs : 'vm'
}
},
resolve : {
loadMyFiles : function($ocLazyLoad) {
return $ocLazyLoad.load({
name : 'list',
files : [ 'crud.service.js', 'list.controller.js' ]
})
},
translatePartialLoader : [ '$translate', '$translatePartialLoader', function($translate, $translatePartialLoader) {
return $translate.refresh();
} ]
}
});
}
})();
list.controller.js
(function() {
'use strict';
angular.module('app').controller('ListController', ListController);
ListController.$inject = [ '$scope', '$state', '$stateParams' ];
function ListController($scope, $state, $stateParams) {
var vm = this;
console.log( $stateParams.entity );
console.log( $stateParams.routeId );
}
})();
当我单击由 HTML code
生成的 url http://localhost:8080/#/bmc/list/xyz/abc
时,没有任何反应。我不确定问题出在哪里,因为我期待我的 ListController
会在点击时被调用。
bmc.html
<a ui-sref="list({routeId: node.name, entity: entity.name})">{{entity.name}} </a>
可能 resolve
值之一失败。您应该注意 $rootScope
中的 $stateChangeError
以确保您处理这些情况。请参阅 ui-路由器文档:
$stateChangeError - fired when an error occurs during transition. It's
important to note that if you have any errors in your resolve
functions (javascript errors, non-existent services, etc) they will
not throw traditionally. You must listen for this $stateChangeError
event to catch ALL errors. Use event.preventDefault() to prevent the
$UrlRouter from reverting the URL to the previous valid location (in
case of a URL navigation).
$rootScope.$on('$stateChangeError',
function(event, toState, toParams, fromState, fromParams, error){ ...
})
我的状态state.js
(function() {
'use strict';
angular.module('app').config(stateConfig);
stateConfig.$inject = [ '$stateProvider' ];
function stateConfig($stateProvider) {
$stateProvider.state('bmc', {
parent : 'entity',
url : '/bmc',
data : {
authorities : [ 'ROLE_USER', 'ROLE_ADMIN' ],
},
views : {
'content@' : {
templateUrl : 'bmc.html',
controller : 'BmcController',
controllerAs : 'vm'
}
}
}).state('list', {
parent : 'bmc',
url : '/list/:routeId/:entity',
data : {
authorities : [ 'ROLE_ADMIN', 'ROLE_USER' ],
},
views : {
'fieldContent@' : {
templateUrl : 'list.html',
controller : 'ListController',
controllerAs : 'vm'
}
},
resolve : {
loadMyFiles : function($ocLazyLoad) {
return $ocLazyLoad.load({
name : 'list',
files : [ 'crud.service.js', 'list.controller.js' ]
})
},
translatePartialLoader : [ '$translate', '$translatePartialLoader', function($translate, $translatePartialLoader) {
return $translate.refresh();
} ]
}
});
}
})();
list.controller.js
(function() {
'use strict';
angular.module('app').controller('ListController', ListController);
ListController.$inject = [ '$scope', '$state', '$stateParams' ];
function ListController($scope, $state, $stateParams) {
var vm = this;
console.log( $stateParams.entity );
console.log( $stateParams.routeId );
}
})();
当我单击由 HTML code
生成的 url http://localhost:8080/#/bmc/list/xyz/abc
时,没有任何反应。我不确定问题出在哪里,因为我期待我的 ListController
会在点击时被调用。
bmc.html
<a ui-sref="list({routeId: node.name, entity: entity.name})">{{entity.name}} </a>
可能 resolve
值之一失败。您应该注意 $rootScope
中的 $stateChangeError
以确保您处理这些情况。请参阅 ui-路由器文档:
$stateChangeError - fired when an error occurs during transition. It's important to note that if you have any errors in your resolve functions (javascript errors, non-existent services, etc) they will not throw traditionally. You must listen for this $stateChangeError event to catch ALL errors. Use event.preventDefault() to prevent the $UrlRouter from reverting the URL to the previous valid location (in case of a URL navigation).
$rootScope.$on('$stateChangeError',
function(event, toState, toParams, fromState, fromParams, error){ ...
})