2014-12-04 36 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元素。爲了訪問你應該創建角度指令。