2014-11-04 31 views
0

我想在致電每個元素時致電事件。如何在運行時在元素上設置ngFocus指令?

但是我認爲在每個元素上設置ngFocus指令並不好,因爲它們可能有很多。

如何在運行時爲每個元素添加一個on-focus事件處理程序?

Plunkr

<ng-form name="myForm"> 
    <p><label>name1: </label><input type="text" name="name1" ng-focus="onFieldFocus(myForm, 'name1')"/></p> 
    <p><label>name2: </label><input type="text" name="name2" ng-focus="onFieldFocus(myForm, 'name2')"/></p> 
</ng-form> 

var app = angular.module('plunker', []); 
app.controller('MainCtrl', function($scope) { 
    $scope.name1 = 'text1 here'; 
    $scope.name2 = 'text2 here'; 

    $scope.result = "Nothing"; 

    $scope.onFieldFocus = function (_formCtrl, _fieldName) { 
    $scope.result = "field "+_fieldName+" of form "+_formCtrl.$name+" was focused"; 
    } 
}); 

我想用angular.element$scope.myForm與AA for..each通過myForm元素不$開始,類似這樣的東西:

for (var i in $scope.myForm) { 
    console.log(i); 
    $scope.result += "1"; 
    if ($scope.myForm.hasOwnProperty(i)) { 
     var property = $scope.myForm.i; 
     if(property.charAt(0) != '$') { 
     $scope.result += property+", "; 
     } 
    } 
    } 
+1

真的不清楚你的問題是什麼。當然,好像你已經結束了這裏複雜的東西 – charlietfl 2014-11-04 14:49:27

+0

[這](http://stackoverflow.com/a/15279343/576767)人似乎認爲你會創建一個元素,編譯它的角度,而不是把它添加到dom 。 – 2015-06-16 06:22:59

回答

1

我會爭辯說它很好的在每個元素上設置ngFocus。 AngularJS是聲明式的,所以你希望明確地聲明相關元素的行爲,而不是強制性地將其設置在別的地方。

如果您不想通過在每個表單元素上放置ngFocus指令來重複自己,那麼我會創建一個適用於ngForm元素的指令(稱爲onFieldFocus或其他)。該指令的行爲是將ngFocus指令應用於作爲表單後代的每個輸入。

+0

謝謝你的回答。可能是更好的主意,然後我的(添加指令形式),但它仍然是如何發送事件監聽器的問題。我知道,如何創建指令,但在其中,我仍然會使用相同的'for..each'和相同的問題 - 如何添加焦點偵聽器。 – 2014-11-04 14:28:55

+0

不要每個都使用相同的。只需要鏈接函數中的指令元素來查找派生輸入元素並直接向它們添加ngFocus指令。那些後代元素還沒有被鏈接,所以ngFocus指令應該工作。 – 2014-11-04 14:47:42

+0

是是的。 '直接添加ngFocus' - 我不明白如何直接添加ngFocus。怎麼樣? [這傢伙](https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#newwindow=1&q=directly+add+the+ngFocus+angular)不幫我或者我的回答不正確。我需要'for..each'來找到並指出每個輸入。或者不是? – 2014-11-04 14:52:13

相關問題