想要调用外部控制器进行角度路由

时间:2014-05-25 03:13:30

标签: angularjs

我有角度路线工作,但我被困在特定的一块我不确定是否可能。我想使用外部控制器文件。

工作代码示例:

 app.config(function($locationProvider, $routeProvider) {
        $locationProvider.html5Mode(true);
        $routeProvider
            .when('/', {
                templateUrl: '/AngularViews/Home/index.html'
            }).when('/Login', {
                templateUrl: 'AngularViews/Account/index.html',
                controller: 'registerUser'
            }).otherwise({ redirectTo: '/'});
    });

    app.controller('registerUser', function($scope) {
        $scope.hello = 'test';
    })

我想做的事情更像是这样:

app.config(function($locationProvider, $routeProvider) {
    $locationProvider.html5Mode(true);
    $routeProvider
        .when('/', {
            templateUrl: '/AngularViews/Home/index.html'
        }).when('/Login', {
            templateUrl: 'AngularViews/Account/index.html',
        }).otherwise({ redirectTo: '/'});
});

模板登录的HTML:

<script src="../../AngularScripts/Account/account.js"></script>
REGISTRATION

<div ng-controller="registerUser">
    {{hello}}
</div>

Account.js文件:

app.controller('registerUser', function($scope, data) {
    $scope.hello = 'hello';
    $scope.registerUser = function () {
        var createData = {
            "UserName": $scope.email,
            "Password": $scope.password,
            "ConfirmPassword": $scope.confirmpass
        };
        console.log(createData);
        return createData;
    };
})

当这样做时,第二种方式一直告诉我registerUser是未定义的,因为它无法找到registerUser

2 个答案:

答案 0 :(得分:2)

您的registerUser控制器必须与定义路由的应用程序在同一个应用程序中定义。如果它在另一个模块中,则需要在主应用程序中将模块作为依赖项注入,并且必须在应用程序定义的同时引入registerUser控制器的脚本。请参阅plunk

答案 1 :(得分:0)

app.controller('registerUser', function($scope, data) {

当调用它时,几乎没有任何反应。 angular.module.controller告诉angular你想要注册一个控制器,但真正的注册发生在应用程序被引导的时候。因此,在正在运行的应用程序期间的任何调用都是徒劳的。

通过$controllerProvider.register(name, function)注册控制器。遗憾的是,当应用程序已在运行时,您无法直接访问$controllerProvider。我们需要作弊。将以下内容添加到配置块中:

app.config(function($locationProvider, $routeProvider, $controllerProvider) {
  ...
  app.$controllerProvider = $controllerProvider;

Account.js文件中,您可以使用

实例化控制器
app.$controllerProvider.register('registerUser', function($scope, data) {