2015-07-10 56 views
1

我正在關注來自here的文檔。這是我按照建議創建的指令。

.directive('setFocusIf', function() { 
    return { 
    link: function($scope, $element, $attr) { 
     $scope.$watch($attr.setFocusIf, function(value) { 
     if (value) { $element[0].focus(); } 
     }); 
    } 
    }; 
}); 

而且我的標記:

<input set-focus-if="hasFocus" ng-focus="hasFocus = false"> 

<button type="button" ng-click="addItem()">Add</button> 

addItem()功能做一些事情,並設置的hasFocustrue值。但是,這不起作用,並且該元素沒有得到關注。在調試時,我發現$watch本身沒有被調用。

然而,當我在按鈕,而不是在addItem()功能設置hasFocustrue設置像ng-click="hasFocus = true"值,它完美的罰款。

我試着把它放在$apply裏,但似乎沒有工作,而且我的內部也不是很清楚。我想我在這裏錯過了一些基礎知識,有人可以指出這兩種方法有什麼區別。

這裏的顯示問題

+0

嘗試$元素並刪除$元素[0] –

+0

這裏的問題是'$ watch'沒有被觸發。所以你的建議不適用於此。 –

+0

你可以創建一個plunker嗎? –

回答

0

OK了plunker,嘗試不同的東西之後,我想通了,它是與範圍的點。

我改變了這種

<input set-focus-if="hasFocus" ng-focus="hasFocus = false"> 

這個

<input set-focus-if="focus.hasFocus" ng-focus="focus.hasFocus = false"> 

而且ofcourse,addItem現在設置$scope.focus.hasFocus = true;

它完美現在......

在一個側面說明,我需要了解這樣設置焦點是否正確。因爲這不適用於需要關注不同場合/事件的多個元素,除非該指令被修改爲相應地工作。但仍然不會有效,因爲$watch將被調用的每個元素有set-focus-if指令。