【问题标题】:angular form name from inside associated controller关联控制器内部的角度形式名称
【发布时间】:2014-09-08 07:31:43
【问题描述】:

我对 Angular 很陌生!我要做的是从关联的控制器内部获取表单名称或从控制器内部获取对表单对象的引用。

<form name="someName" ng-controller="formController">
    <label>Name:
        <input type="text"/>
    </label>
    <input type="submit"/>
</form>

控制器:

obApp.controller('formController',function($scope){
  //this does NOT work - undefined - was expecting it to be "someName"
  var q = $scope.formName;
  //this exists - but can not use it since the 
  //name of the form can be whatever and i do not know beforehand what that name is
  var name = $scope.someName.$name;
});

我的问题是我不知道如何获得实际表单的名称。引用它会更好。找了大约5个小时,我似乎无法弄清楚。

问题转化为:“如何从关联的控制器中获取对表单对象的引用?”。

【问题讨论】:

  • 类似的东西。这个想法是我需要解决问题,就好像我不知道表单名称一样。
  • 没有足够的信息来了解解决问题的正确方法。我几乎可以肯定这是一个 X/Y 问题。
  • 信息量不够怎么办?这是一个普遍的问题。任何解决方案都可以!
  • 因为我能想到的解决方法有 3 种,而且都很尴尬。这是一个非常具体的用例的通用问题,我想知道它是否有效。无论如何,Josep 给了你最不尴尬的答案。
  • 很少有理由需要这样做;因此这似乎是一个 X/Y 问题。也就是说,您正在尝试解决问题 X,并且您认为解决方案 Y 会起作用,但是当您遇到麻烦时,您不会询问 X,而是询问 Y。提供更多关于您需要访问表单的原因的上下文名字而不是问你为什么不能这样做会更有帮助。

标签: angularjs angularjs-scope angularjs-controller


【解决方案1】:

问题是你想访问控制器的 DOM 元素,你可以这样做:

obApp.controller('formController',function($scope, $element){
  var name = $element.attr('name');
});

但这被认为是一种不好的做法,您不应该直接在控制器内部访问 DOM 元素,而应考虑使用指令。

【讨论】:

  • 是的,我自己在另一个控制器中编写了这个,但我现在似乎太累了,甚至无法正确思考。自从我意识到通过看到上面的 cmets 我以错误的方式处理这个问题后,不会将其标记为已接受。不过还是竖起大拇指。
  • 我实际上深入挖掘并找到了我的 X 问题的答案 - 将标记为已接受,因为我不需要重新表述我的原始问题,这回答了原始问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 2016-10-03
相关资源
最近更新 更多