ng-click不会使用工厂类触发

时间:2014-09-05 21:22:54

标签: javascript angularjs factory

我是AngularJS的新手。输入用户名和密码并单击登录按钮后,以下代码未执行。登录应该执行登录方法并填充人员数据绑定对象。谁知道为什么不解雇?感谢。

工厂档案

'use strict';

var usermodule = angular.module('retrieveBasicUserInfo', [])
.factory('basicUserInfo', function($http) {

    var credentials = {
        username: '',
        password: ''
    };
    var person = "";

    $http.defaults.useXDomain = true;

    var getBasicUserInfo = function (credentials) {
        var inputdata = { "Logon": credentials.username, "Pass": credentials.password};
        $http.post('http://localhost:23034/api/wmsusers/login',JSON.stringify(inputdata),
           {
               headers: {
                   'Access-Control-Allow-Origin' : '*',
                   'Access-Control-Allow-Methods' : 'POST, GET, OPTIONS, PUT',
                   'Content-Type': 'application/json',
                   'Accept': 'application/json'
               }
           }).success(function (inputdata) {
               person = inputdata[0];
           });
    };

    return {
        person: getBasicUserInfo
    };
});

JavaScript文件

'use strict';

var usermodule = angular.module('wms', ['retrieveBasicUserInfo'])
    .controller('userAuthentication', ['basicUserInfo', function ($scope, basicUserInfo) {
        $scope.credentials = {
            username: '',
            password: ''
        };
        $scope.login = function (credentials) {
            console.log(credentials)
            $scope.person = basicUserInfo.getBasicUserInfo(credentials);
        }
    }]);

HTML文件

<div data-ng-controller="userAuthentication">
<div class="login-panel">
    <p>Please complete the following form and click Login to continue:</p>
    <form name="loginForm" data-ng-submit="login(credentials)" novalidate>

        <label for="username">Username:</label>
        <input type="text" id="username"
               data-ng-model="credentials.username">

        <label for="password">Password:</label>
        <input type="password" id="password"
               data-ng-model="credentials.password">

        <button type="submit">Login</button>

    </form>
</div>
<br>
    <ul data-ng-model="$parent.person">
        <li>Name: {{person.Name}}</li>
        <li>Associate Id: {{person.Empid}}</li>
        <li>Access Level: {{person.Access}}</li>
    </ul>

1 个答案:

答案 0 :(得分:2)

请参见http://jsbin.com/vaweja/2/edit

您的工厂返回具有person属性的对象,并且在您的控制器中,您正尝试将getBasicUserInfo传递给getBasicUserInfo。你错过了控制器定义中的$ scope

改变

return {
        person: getBasicUserInfo
    };

return {
        getBasicUserInfo: getBasicUserInfo
    };

var usermodule = angular.module('wms', ['retrieveBasicUserInfo'])
//and you missed $scope in line bellow after bracket
    .controller('userAuthentication', ['$scope','basicUserInfo', function ($scope, basicUserInfo) {
        $scope.credentials = {
            username: '',
            password: ''
        };
        $scope.login = function (credentials) {
            console.log(credentials)
            $scope.person = basicUserInfo.getBasicUserInfo(credentials);
        }
    }])