Angularjs控制器显示未定义?

时间:2015-01-05 14:41:15

标签: angularjs node.js controller cassandra

我正在使用angularjs和cassandra处理节点应用程序。 当我转到页面,如注册页面,然后前端正在适当,但它显示控制器未定义的错误。 错误:错误:areq 不好的论据

这是app.js(主js配置文件)

angular.module('app', ['ui.router'])
.config(['$urlRouterProvider', '$stateProvider',
    function($urlRouterProvider, $stateProvider) {
        $urlRouterProvider.otherwise('/');
        $stateProvider
            .state('home', {
                url: '/',
                templateUrl: '/browser/views/home.html'
            })
            .state('register', {
                url: '/register',
                templateUrl: '/browser/views/register.html',
                controller: 'RegisterCtrl'
            })
            .state('login', {
                url: '/login',
                templateUrl: '/browser/views/login.html',
                controller: 'LoginCtrl'
            })
    }
]);

这是register.html文件,后跟控制器的路径。

<div ng-controller="RegisterCtrl" class="container-fluid">
<div class="row custom-row2">
    <div class="col-md-6 col-lg-6 col-sm-6">
        <h4 class="sign_up">{{ title }}</h4>
        <form class="form-horizontal" id="login_form" name="login_form" role="form">
            <div class="form-group">
                <label class="control-label col-sm-3" for="name">Name:</label>
                <div class="col-sm-9">
                    <input ng-model="name" type="text" class="form-control" name="field1" id="name" aria-describedby="inputSuccess3Status" placeholder="Enter Your Name....">
                </div>
            </div>
        </form>
    </div>
</div>

这是在firebug中检查的registerCtrl.js文件

 angular.module('app', ['ui.router'])
    .controller('RegisterCtrl', ['$scope',
        function($scope, RegiserService) {
            $scope.title = "Sign Up";
        }
    ]);

但必须来自registerCtrl控制器的标题未来, {{title}} 即将到来。

我已经多次通过这个但是没有能够解决定义控制器的问题。

2 个答案:

答案 0 :(得分:3)

您正在通过执行angular.module('app', ['ui.router']).controller.再次重新创建模块。只需使用getter语法angular.module('app')在创建应用程序后获取模块。我假设您在注册服务RegiserService时也这样做,这会清除注册到同一模块app的任何其他内容。使用语法angular.module('moduleName', [..dep])创建模块后,您应该在注册任何其他后续实体时获取具有getter语法angular.module('app')的模块。

模块创建(只需一次):

angular.module(moduleName, [requires], [configFn]);

模块Getter(访问已创建的模块):

angular.module(moduleName);

请参阅documentation

  

传递两个或多个参数时,会创建一个新模块。如果只传递一个参数,则检索现有模块(作为模块的第一个参数传递的名称)。

例如: -

 angular.module('app').controller('RegisterCtrl',...
 angular.module('app').service('RegiserService',...

答案 1 :(得分:1)

随着PSL提到的重新定义模块, 还有一点是 - RegiserService是什么?如果它是某种服务,那么控制器的定义是错误的。

正确的定义是

angular.module('app', ['ui.router'])
    .controller('RegisterCtrl', ['$scope', 'RegiserService',
        function($scope, RegiserService) {
            $scope.title = "Sign Up";
        }
    ]);