Angularjs 表单提交后未定义控制器:参数';注册控制器';不是函数,未定义
我在应用程序配置文件中编写了一些自定义路由,以处理所有html模板和控制器的路由,而不必为每个html和控制器专门定义路由。我在Modules/Account/directory下有一个Registration.html和RegistrationController.js。我的应用程序可以在我第一次访问它时找到控制器,我可以填写页面并在页面上提交表单。成功提交后,我会被重定向到成功页面。当我第二次尝试返回到同一个注册html/控制器时,它可以找到我的html模板,但它再也找不到我的控制器,我得到错误“参数'RegistrationController'不是函数,未定义”。有人能告诉我为什么以及如何解决这个问题吗 请注意,此错误仅在表单提交后发生。如果我离开页面并返回页面而不进行表单提交,则一切正常 应用程序配置Angularjs 表单提交后未定义控制器:参数';注册控制器';不是函数,未定义,angularjs,Angularjs,我在应用程序配置文件中编写了一些自定义路由,以处理所有html模板和控制器的路由,而不必为每个html和控制器专门定义路由。我在Modules/Account/directory下有一个Registration.html和RegistrationController.js。我的应用程序可以在我第一次访问它时找到控制器,我可以填写页面并在页面上提交表单。成功提交后,我会被重定向到成功页面。当我第二次尝试返回到同一个注册html/控制器时,它可以找到我的html模板,但它再也找不到我的控制器,我得到
define(['angularAMD', 'angular-route', 'ui-bootstrap', 'ui-grid'], function (angularAMD) {
var app = angular.module("MyApp", ['ngRoute', 'ui.bootstrap', 'ui.grid']);
app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$routeProvider
.when("/", angularAMD.route({
templateUrl: function (rp) { return 'Modules/Account/login.html'; },
controllerUrl: 'Modules/Account/LoginController'
}))
.when("/:module/:page", angularAMD.route({
templateUrl: function (rp) { return 'Modules/' + rp.module + '/' + rp.page + '.html'; },
resolve: {
load: ['$q', '$rootScope', '$location', function ($q, $rootScope, $location) {
var path = $location.path();
var parsePath = path.split('/');
var parentPath = parsePath[1];
var controllerName = parsePath[2];
var loadController = "Modules/" + parentPath + "/" + controllerName + "Controller";
debugger;
var deferred = $q.defer();
require([loadController], function () {
$rootScope.$apply(function () {
deferred.resolve();
});
});
return deferred.promise;
}]
}
}))
.otherwise({ redirectTo: '/' });
}]);
loadDirectives(app);
angularAMD.bootstrap(app);
return app;
});
注册控制器
define(['app-config','accountService'], function (app) {
app.register.controller('RegistrationController', ['$scope', '$rootScope', '$location', '$uibModal', 'accountService',
function ($scope, $rootScope, $location, $uibModal, accountService) {
$rootScope.applicationModule = "Account";
$scope.registerUserSuccess = function (response, status) {
debugger;
$location.path("/Account/RegistrationSuccess");
}
$scope.registerUserFailure = function (response, status) {
if (!response.ValidationErrors) {
$scope.ErrorList = [];
$scope.ErrorList.push("An error occurred. Please contact the system's administrator");
}
else {
$scope.ErrorList = response.ValidationErrors;
}
}
$scope.onSubmitClick = function (isValid) {
if (isValid) {
accountService.registerUser($scope.regModel, $scope.registerUserSuccess, $scope.registerUserFailure);
}
}
$scope.onCancelClick = function () {
$location.path("/Login");
}
}
]);
});
我还没有找到答案,但我注意到你应该做一些重构,这可能会让你更接近于解决你的问题
您的问题没有RegistrationController代码我认为没有必要发布它,因为RegistrationController没有问题。如果我在routerprovider中为控制器添加了一个特定的定义,那么它每次都会找到控制器,并且一切都会正常工作。我的问题是我上面写的自定义路由第二次找不到我的控制器。它只能在我第一次访问控制器时找到。不,问题出在你的控制器上。我用控制器更新了我的问题。我使用requireJS进行延迟加载。你是对的。我有一个重复的注册控制器。根据#6,我实际上将$scope.Error函数从我的控制器传递给我的accountService,以便accountService.registerUser.then()调用它并通过$rootScope处理我的loadmasking。现在重构$scope和$rootScope对我来说有点困难,因为我在保存和加载html表单时使用它进行加载屏蔽。再次感谢你的帮助!