2015-01-05 116 views
4

我正在使用angularjs和cassandra在节点应用程序上工作。 当我去页面如注册页面,然后前端正常到来,但它显示错误,控制器是未定义的。 错误:错误:AREQ 为参数Angularjs控制器显示未定义?

这是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的检查

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

冠军其中有即将来自registerCtrl控制器registerCtrl.js文件不是来和{{title}}即将在那个地方。

我已经经历了几次这样的事情,但没有能够得到定义控制器时出了什么问题。

+1

你做'angular.module( '应用',[ 'ui.router'])。controller'再重新创建应用程序。在创建应用程序后,只需使用getter语法'angular.module('app')'来获取模块。 – PSL

+0

我没有找到你?请解释 ?? – ashishkumar148

+0

我已经添加了解释与文档链接的答案..这是否解决您的问题? – PSL

回答

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]); 

模块吸气剂(访问已经创建的模块):

angular.module(moduleName); 

documentation

When passed two or more arguments, a new module is created. If passed only one argument, an existing module (the name passed as the first argument to module) is retrieved.

因此,例如: -

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

你也可以这样做,并使用'app',但是你会污染全局命名空间。相反,你可以使用getter语法,因为我已经提到'angular.module('app').controller ...;'。你可以用'angular.module('app',['ui.router'])''来创建模块一次。这说明了吗? – PSL

+0

我曾试过,但控制器仍未定义。 – ashishkumar148

+0

@ashish__k它非常简单和基本。你必须在其他地方重新定义模块。我们不仅可以根据您向我们展示的内容提供帮助。你也需要'ng-app =“app”'在你的html中。除了我们向我们展示的内容之外,还有很多其他的东西可能会与我们分开。 – PSL

1

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

正确的定义是

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

这是用于未在上面给出的部分中使用的进一步使用。 – ashishkumar148

+0

但是它应该已经作为服务可用,并在'scope'之后附加,否则应该将其从控制器定义中删除。 –

+0

是啊,它是目前没有显示,因为我只写了部分代码给出问题的性质的想法。 – ashishkumar148