Событие ng-click не срабатывает при нажатии кнопки?

Я создаю веб-приложение в Angularjs. Я пишу код в отдельном файле .js для входа в базу данных. Он выполняется при загрузке страницы, но не срабатывает при нажатии кнопки, мой код .js:

var adminModule = angular.module('angApp', []);
//Defining a Angular Controller
adminModule.controller('AdminCtrl', ['$scope', '$http',
    function ($scope, $http) {
        Login();
        function Login(U_Name, U_PWD) {
            debugger;
            //Defining the $http service for login the admin user
            $http({
                method: 'POST',
                url: '/Admin/IsAuthenticate',
                data: { User_Name: U_Name, User_PWD: U_PWD }
            }).success(function (result) {

                if (result == true) {
                    alert('user is valid');
                }
                else {
                    alert('unauthorised access!');
                }
            }).error(function (error) {
                //Showing error message 
                $scope.status = 'Unable to connect' + error.message;
            });
        }
    }]);

и мое мнение о том, что я использую для привязки этого с помощью Angularjs, вот проблема, вышеприведенный код работает при загрузке страницы, но не работает при нажатии кнопки, код, который я использую:

<div class="admin-login" ng-controller="AdminCtrl" ng-app="angApp">
    <h2>using angularjs</h2>
    <input type="text" id="txtUserAng" placeholder="User Name" ng-model="U_Name" />
    <input type="password" id="txtPWDAng" placeholder="Password" ng-model="U_PWD"  />
    <input type="button" id="login" value="login" ng-click="Login()" />
</div>

кто-нибудь, пожалуйста, помогите мне, что я здесь упускаю, поэтому я не могу вызвать событие ng-click при нажатии кнопки, спасибо заранее.


person Amit Sharma    schedule 29.10.2014    source источник
comment
это должно быть $scope.login = function() и т. д.   -  person user2717954    schedule 29.10.2014
comment
я использовал его, но он не смог решить мою проблему: $scope.login = function Login(U_Name, U_PWD) { $http({ method: 'POST', url: '/Admin/IsAuthenticate', data: {User_Name: U_Name, User_PWD: U_PWD } }).success(function (result) { if (result == true) { alert('пользователь действителен'); } else { alert('несанкционированный доступ!'); } }) }   -  person Amit Sharma    schedule 29.10.2014
comment
затем покажите свой обновленный код   -  person user2717954    schedule 29.10.2014
comment
в основной теме, а не в комментарии   -  person user2717954    schedule 29.10.2014


Ответы (2)


Ваша функция Login должна быть в области видимости. Прямо сейчас это, по сути, частная функция:

$scope.Login = function () {
  ...
}
person sma    schedule 29.10.2014
comment
я пишу так же, как и выше, но он не выполняется по событию клика, он отлично работает при загрузке - person Amit Sharma; 29.10.2014
comment
Он работает под нагрузкой, потому что при создании контроллер вызывает Login() в своей лексической области видимости. Можете ли вы создать Plunk или JsFiddle, показывающий вашу проблему? Если вы определяете функцию в области видимости, а затем ссылаетесь на нее в своем HTML, она должна работать. - person sma; 29.10.2014
comment
Это работает для меня. Обновлена ​​скрипта с console.log, чтобы показать, что вызывается функция входа в систему. Есть и другие ошибки, но ваш первоначальный вопрос заключался в том, что событие ng-click не срабатывало. jsfiddle.net/smaye81/pefLcbua/2 - person sma; 29.10.2014
comment
привет, сма, я не могу понять, что ты имеешь в виду под скрипкой, используя console.log - person Amit Sharma; 29.10.2014
comment
Если вы посмотрите на ссылку для моей скрипки, когда вы нажмете кнопку, вы увидите, что «вызванный логин» зарегистрирован в консоли браузера. - person sma; 29.10.2014
comment
привет сма, теперь это также работает в моей скрипте: jsfiddle.net/6nnjeqn6/4, но я не смог не понимаю, что мне нужно добавить в мой проект, так что это поможет запустить событие ng-click - person Amit Sharma; 29.10.2014

назначить функцию переменной области видимости.

var adminModule = angular.module('angApp', []);
//Defining a Angular Controller
adminModule.controller('AdminCtrl', ['$scope', '$http',
    function ($scope, $http) {
        $scope.Login = function (U_Name, U_PWD) {
            debugger;
            //Defining the $http service for login the admin user
            $http({
                method: 'POST',
                url: '/Admin/IsAuthenticate',
                data: { User_Name: U_Name, User_PWD: U_PWD }
            }).success(function (result) {
                if (result == true) {
                    alert('user is valid');
                }
                else {
                    alert('unauthorised access!');
                }
            }).error(function (error) {
                //Showing error message 
                $scope.status = 'Unable to connect' + error.message;
            });
        }
        $scope.Login();
    }]);

Отредактировано:

попробуйте использовать этот html-код, но я не уверен. Возможно, и ng-init, и ng-controller находятся в одном и том же div, а ng-controller загружается первым после этого ng-init:

<div ng-app="angApp">
  <div class="admin-login" ng-controller="AdminCtrl" >
     <h2>using angularjs</h2>
    <input type="text" id="txtUserAng" placeholder="User Name" ng-model="U_Name" />
    <input type="password" id="txtPWDAng" placeholder="Password" ng-model="U_PWD"  />
    <input type="button" id="login" value="login" ng-click="Login()" />
  </div>
</div>
person Mukund Kumar    schedule 29.10.2014
comment
я пишу так же, как и выше, но он не выполняется по событию клика, он отлично работает при загрузке - person Amit Sharma; 29.10.2014
comment
проблема только с событием ng-click, оно отлично работает при загрузке, но в событии click оно не переходит к контроллеру .js - person Amit Sharma; 29.10.2014