【问题标题】:Angularjs referencing a form in a controller getting html elementAngularjs在控制器中引用表单获取html元素
【发布时间】:2014-08-11 22:18:21
【问题描述】:

我有一个名为“loginForm”的表单,它有一个控制器“loginController”,它的方法“login”设置为表单的提交。如果我引用表单而不使用范围引用它,则在 javascript 中的登录方法内部;这样做是“loginForm”而不是“$scope.loginForm”;我得到了对 html 元素的引用,如果我检查 window.loginForm 我发现这是一个全局变量。我试图弄清楚这个变量是如何被创建并放入全局范围的。请参阅下面的 plnkr 链接以获取我所指的示例。

http://plnkr.co/YY3ls7ele8uNpnhstG3X

控制器

(function(){
  angular.module('testApp',[])
    .controller('loginController',['$scope',function($scope){

      $scope.login = function(){
        console.debug(loginForm); //console shows html element
        console.debug(window.loginForm); //shows html element
      }  
    }]);
  })();

【问题讨论】:

  • 这个我没试过,但是如果你观察你描述的行为,那真的很奇怪。

标签: javascript angularjs forms


【解决方案1】:

如果您使用的是form,那么您需要从视图中传递它。

<form name="loginForm"  class="form-horizontal" ng-submit="login(loginForm)">

并在您的方法中获取它:-

$scope.login = function(loginForm){

或使用ng-form="formName" 将表单控制器实例作为范围的一部分,但 1.2 版本的 angular 存在问题,其中 ng-submit 不会在 ng-form 上触发。

【讨论】:

  • 我了解如何从方法中获取对表单的引用;我试图弄清楚的问题是为什么当我只引用 loginForm 时,我得到了 html 元素。我试图弄清楚这个全局变量是如何创建的。
  • 在某些浏览器中,您可以访问 formName 作为窗口的一部分。这是一个已知的事情.. 但是那个表单是 html 元素.. 在控制器内部你可能真的想要 formController
  • 此外,您不仅会看到您可以找到带有 id 的元素,也可以作为窗口的一部分访问...这是您的问题吗?
  • 看来 PSL 是对的。使用&lt;form name="foo" /&gt; 创建一个存根.html 文件。检查window.foo。它与 AngularJS 无关。
  • 我不知道如果我引用表单的名称而不执行 document.forms.formname 我仍然可以获得表单 html 元素
猜你喜欢
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多