【问题标题】:AngularJS, UI Bootsrap, MVC Frontend - data-ng-click is not workingAngularJS、UI Bootstrap、MVC 前端 - data-ng-click 不起作用
【发布时间】:2014-09-22 15:04:23
【问题描述】:

我正在尝试注册用户(从前端的表单输入中获取一些信息并通过 AngularJS 将其发送到后端)但我遇到了一些问题。

这是我的 index.html 文件:

<!DOCTYPE html>
<html data-ng-app="collectionsApp">
    <head>
        <meta charset="UTF-8">
        <title>Collections</title>
        <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <div data-ng-view></div>
    </body>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js"></script>
    <script src="http://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.10.0/ui-bootstrap-tpls.js"></script>
    <script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular-route.js"></script>
    <script src="/scripts/app.js"></script>
    <script src="/scripts/service/userService.js"></script>
    <script src="/scripts/controller/indexController.js"></script>
    <script src="/scripts/controller/registerController.js"></script>
</html>

如您所见,我已经包含了 Bootstrap UI、AngularJS、Bootstarp CSS 和我的项目文件:userService.js、indexController.js 和 registerController.js。我创建了属性 data-ng-app="collectionsApp"(在 app.js 中创建)和 data-ng-view(路由工作得很好)。

这是我的 app.js 文件:

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

collectionsApp.config(function($routeProvider) {
    $routeProvider.when('/login', {
                   templateUrl : '/view/login.html',
                   controller : 'loginController'
    })
                  .when('/register', {
                   templateUrl : '/view/register.html',
                   controller : 'registerController'
    }).

    otherwise({
        redirectTo : '/login'
    });
});

如您所见,我已将我的 registerControll 和 loginControll 包含在 app.js 中,因此我不必在 register.html 和 login.html 中执行此操作。

这是我的 register.html 文件:

<div class="container">
   <form class="form-signin" role="form">
      <h1 class="form-signin-heading">Please register</h1>
      <input type="text" class="form-control" placeholder="Email address" required data-ng-model='user.email'> 
      <input type="text" class="form-control" placeholder="Password" required data-ng-model='user.password'>
      <input type="text" class="form-control" placeholder="Firts name" required data-ng-model='user.firstName'>
      <input type="text" class="form-control" placeholder="Last name" required data-ng-model='user.LastName'>
      <button class="btn btn-lg btn-primary btn-block" type="submit" data-ng-click="register(user)">Register</button>
      <div>
         <a href="#login">Login</a>
      </div>
   </form>
</div>

从 userControl.js 文件调用 data-ng-click 注册(用户)函数。 这是我的 userController.js 文件:

collectionsApp.controller('registerController', function($scope, userService) {
    userService.register($scope.user).then(function(data){

    });
});

从此文件中调用 userService.js 文件中的函数。 这是我的 userService.js 文件:

collectionsApp.service('userService', function($scope, $http) {
    return {
        login : function(user) {
            $http.post('/user/login', user).then(function(data) {
                return data;
            });
        },
        register : function(user) {
            $http.post('/user/add', user).then(function(data) {
                return data;
            });
        }
    };
});

从这里注册函数目标 /user/add 到后端的 userController.java 中。这是那个文件:

package x.y.collections.controller;

import java.util.HashMap;

import javax.annotation.Resource;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import x.y.collections.dao.UserDAO;
import x.y.collections.model.User;
import x.y.collections.utility.Response;

@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    UserDAO userDao;

    @RequestMapping("/find/{id}")
    public User FindUser(@PathVariable Long id) {
        return userDao.findOne(id);
    }

    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public HashMap<String, String> AddUser(@RequestBody User user) {
        final User requestedUserBody = userDao.findByEmail(user.getEmail());
        if (requestedUserBody.getEmail().equals(user.getEmail())) {
            return Response.setError("User allready in databse!");
        } else {
            userDao.save(user);
            return Response.setSuccess("Registration succsessful!");
        }
    }

    @RequestMapping(value = { "/login" }, method = RequestMethod.POST)
    public HashMap<String, String> LoginUser(@RequestBody User user) {
        final User requestedUserBody = userDao.findByEmail(user.getEmail());
        if (requestedUserBody.getPassword().equals(user.getPassword())) {
            return Response.setError("Username and password do not match!");
        } else {
            return Response.setSuccess("Login succsessful!");
        }
    }
}

当我启动服务器并通过 Chrome 和地址栏中的 localhost:port 转到我的前端时,我可以看到路由正在工作,但是当我填写表格并按下应该触发 data-ng-click= 的按钮时“注册(用户)”注意发生。当我右键单击 > 检查元素 > 控制台时:我看到此错误:

Error: [$injector:unpr] http://errors.angularjs.org/1.2.19/$injector/unpr?p0=<div data-ng-view="" class="ng-scope">copeProvider%20%3C-%20%24scope%20%3C-%20userService
    at Error (native)
    at http://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js:6:450
    at http://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js:36:202
    at Object.c [as get] (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js:34:305)
    at http://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js:36:270
    at c (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js:34:305)
    at d (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js:35:6)
    at Object.instantiate (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js:35:165)
    at Object.<anonymous> (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js:35:435)
    at Object.d [as invoke] (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js:35:36) 

有人可以向我解释我做错了什么吗? 比你提前... 爸爸

【问题讨论】:

    标签: java javascript html angularjs spring-mvc


    【解决方案1】:

    在你的注册控制器中

    collectionsApp.controller('registerController', function($scope, userService) {
        $scope.user = {};
        .....
        $scope.register = function(){
             userService.register($scope.user).then(function(data){
    
             });
        };
    });
    

    【讨论】:

    • 感谢 Scott,但它仍然无法正常工作... js 控制台出现同样的旧错误,我在数据库中看不到任何条目,表为空...
    猜你喜欢
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多