2014-12-04 32 views
0

我有一个角度视图的表单。在窗体上的按钮中,我添加了一个事件来使用$ http向服务器发送请求。在将请求发送到服务器之前,我需要使用jQuery Validate验证表单。从控制器的角度来看dom元素

为了验证表单,我需要控制器中表单的dom引用。我的应用程序中已经有了jQuery。所以可以得到表格的参考使用

$(selecter) or angular.element($(selecter)) 

但是在这两种情况下,它都会搜索完整文档以获取元素的引用。相反,我需要在视图的上下文中搜索元素,这将提高性能。

我已经在角度中看到了$元素的使用。但后来我发现不推荐使用$元素,它可能会在新版本的angular中折旧。当我试图在控制器中获取$元素时,我收到错误。所以我猜它已经贬值了。

那么从控制器的角度来看dom元素的最佳方式是什么?

回答

1

正如Mikalai所说。与你必须创建指令的任何元素处理(这是角度的方式..)

举一个例子:

  • HTML <input type="text" select-all value="test" />
  • 指令

    app.directive('selectAll', function() { 
    return { 
        restrict: 'A', 
        link: function(scope, element, attrs) { 
         element.on('click', function() { 
          this.select(); 
         }); 
        }; 
    }); 
    

这指令只需选择文本元素中的所有文本。

UPDATE:

我创建plunker为您服务。这是你要求的吗?

更新2

我才意识到,我们并不需要的eval这里都没有。我不知道,为什么我把它放在首位。评估也可能有害。

看看这个plunker

+0

在这种情况下,对于我的应用程序中的每个表单,我都要创建一个新的指令。所以如果我可以使用控制器做到这一点会更好。 – Indra 2014-12-04 14:40:34

+0

或者你可以在控制器中声明函数,然后在指令thrugh attrs和指令中使用它们的名字使用eval('var fn = +'attrs.function)来使用它们?我不知道,只是在想:) – Clem 2014-12-04 14:51:23

+0

其实我是新的角js,你可以请在plunkr或jsfiddle中添加一些代码。 – Indra 2014-12-04 14:59:04

0

不建议在控制器的视图上下文中使用dom元素。为了访问你应该创建角度指令。