Jquery AngularJS:如何获取表单动作属性

Jquery AngularJS:如何获取表单动作属性,jquery,angularjs,angularjs-directive,angularjs-scope,Jquery,Angularjs,Angularjs Directive,Angularjs Scope,我是AngularJS的新手,可能做了一些完全错误的事情,因此,请不要过于严格地判断 我有一张表格: <form method="post" action="/secured/login_check" id="login-form" submit="loginCheck()" name="loginForm"> <input type="text" name="_username" ng-model="data.username"/> <input

我是AngularJS的新手,可能做了一些完全错误的事情,因此,请不要过于严格地判断

我有一张表格:

<form method="post" action="/secured/login_check" id="login-form" submit="loginCheck()" name="loginForm">
    <input type="text" name="_username" ng-model="data.username"/>
    <input type="password" name="_password" ng-model="data.password"/>
    <button class="btn btn-primary" type="submit">Sign in</button>
</form>
我的主要问题是:如何将attr和/或元素传递给$apply调用?或者如何在$scope.loginCheck中获取此信息?这是为了动态设置ajax的url参数

一、 当然,我们可以在loginCheck过程中使用$('#login form').attr('action'),但我相信有更好的方法(“角度更高的方法”)可以做到这一点

我之所以要使用这个属性,是因为它是从PHP应用程序生成的,对于开发环境和产品环境来说是不同的。此外,我希望它可以在一个地方配置,而不是在多个地方配置


p、 如果你能提供一个完全不同的解决方案,但保留原来的想法,我也会对它感兴趣。

然而,最后,我意识到我的想法完全是设计错误的,我改变了一切,我现在可以说,如何才能获得action attr

该指令很容易执行:

HTML:

现在,当该指令被链接时,MyService被设置为实际操作属性,可以通过InAction MyService在AngularJS中的任何地方使用该属性。当然,这比jQuery调用需要更多的行数,但最终会迫使您拆分MVC部件,并让您思考如何更好地完成这些工作

另外,请避免在应用程序中使用$.ajax()(请参阅:)

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

smsApp.controller('LoginCtrl', function($scope) {
    $scope.loginCheck = function() {
        $.ajax({
            url: '/secured/login_check', // here I want to use form action attr value
            data: {
                _username: $scope.data.username,
                _password: $scope.data.password
            },
            success: function(){
                console.log('logged in');
            },
            error: function(){
                console.log('login failed');
            }
        });
    };
});

smsApp.directive('submit', function() {
    return function (scope, element, attrs) {
        element.bind('submit', function() {
            scope.$apply(attrs.submit);
            return false;
        });
    }
});
<form action="/secured/login_check" my-directive ...other attrs...>
   <!-- ... -->
</form>
var myDirectives = angular.module('myDirectives', []);

myDirectives.directive('myDirective', ['MyService', function(MyService) {
    var directiveDefinitionObject = {
        restrict: 'A',
        link: function (scope, iElement, iAttrs, controller, transcludeFn) {
            MyService.setAction(iAttrs.action);
        }
    };
    return directiveDefinitionObject;
}]);


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

myServices.factory('MyService', function(){
    var action = '';
    return {
        setAction: function(val) {
            action = val;
        },
        getAction: function() {
            return action;
        }
    };
});