2014-02-12 103 views
3

我已经从我的REST API得到一个访问令牌以下服务:为什么ng-click不能调用我的控制器功能?

var myServices = angular.module('myServices ', ['ngResource']); 

myServices .factory('Auth', ['$resource', 
    function($resource){  
    return $resource('http://192.168.0.17:3333/login', {}, { 
     login: {method:'POST', params: { username: 'user1', password: 'abc123' }, isArray:false} 
    }); 
    } 
]); 

和我有以下控制器定义:

var myControllers = angular.module('myControllers ', []); 

     myControllers.controller('AuthCtrl', ['$scope', 'Auth', function($scope, Auth) { 
      $scope.login = function() { 
       console.log('Login'); 
       Auth.login(); 
      }; 
     }]); 

我的登录表单如下:

<form ng-controller="AuthCtrl"> 
    <input type="text" name="username" id="username" placeholder="Username" ng-model="username" /> 
    <input type="password" name="password" id="password" placeholder="Password" ng-model="userpassword" /> 
    <button type="submit" ng-click="login();">Login</button> 
</form> 

当我点击“登录”按钮,它不叫AuthCtrl的login()函数,我想不通为什么:■

+0

你在哪里使用ngApp –

+0

登录表单是部分但ng应用被定义为标记上的“myApp”... – SomethingOn

+0

在您的浏览器控制台 –

回答

2

所以问题最终成为一个NP-应用衍生物。更具体地说,缺少一个派生。我平时

<html np-app="myApp"> 
... 
</html> 

但组织我的代码,写它,谷歌建议的方式的时候,我意识到,我实际上已经创造了另一个应用程序。有了这个代码myControllers,这是一种病命名模块:

var myControllers = angular.module('myControllers ', []); 

登录表单是在一个局部,所以我添加一个div与周围的myControllers程序指令形式:

<div ng-app="myControllers"> 
<form ng-controller="AuthCtrl"> 
    <input type="text" name="username" id="username" placeholder="Username" ng-model="username" /> 
    <input type="password" name="password" id="password" placeholder="Password" ng-model="userpassword" /> 
    <button type="submit" ng-click="login();">Login</button> 
</form> 
</div> 

AngularJS是写成非常非常模块化。你可以有多个应用程序,你的控制器应该只包装,它需要,所以如果有什么不工作仔细检查您已经添加了必要的衍生工具DOM中的DOM元素;)

+0

您的意思是输入'np-app'而不是'ng-app'?请接受您的答案来解决问题。 – isherwood

6

我认为你将是心烦自己。我能够通过删除myControllers声明后的空间来解决此问题。检查此:

var myControllers = angular.module('myControllers**YOU HAD A SPACE HERE**', []); 

我改变它到以下,它的工作。看起来你的服务会遇到同样的问题。

var myControllers = angular.module('myControllers', []); //no space after the myControllers 

SEE MY CODE HERE

+1

哈哈感谢@aaronfrost,但实际上这不是问题,它是一个不正确的ng-app声明......我会尽快发布我的答案。 – SomethingOn

+0

这可能是事实。我在html标记中的ng-app =“myControllers”中添加了一个应用程序声明。所以,我想这可能是其中之一。祝你好运! – frosty

0

您可以使用别名时在角度配置中定义Controller。例如: 注意:我在这里使用TypeScript

只要记下控制器,它有一个homeCtrl的别名。

module MongoAngular { 

var app = angular.module('mongoAngular', ['ngResource', 'ngRoute','restangular']); 

app.config([ 
    '$routeProvider', ($routeProvider: ng.route.IRouteProvider) => { 
     $routeProvider 
      .when('/Home', { 
       templateUrl: '/PartialViews/Home/home.html', 
       controller: 'HomeController as homeCtrl' 
      }) 
      .otherwise({ redirectTo: '/Home' }); 
    }]) 
    .config(['RestangularProvider', (restangularProvider: restangular.IProvider) => { 
    restangularProvider.setBaseUrl('/api'); 
}]); 
} 

下面是使用它的方式......

ng-click="homeCtrl.addCustomer(customer)" 

试试吧..这可能会为你工作,因为它为我工作...;)

相关问题