focusOn
특성을 실제로 볼 수 있다고 생각하지 않습니다. 실제로는 지시문의 특성으로 존재하지 않기 때문입니다. <input focus-on='{{isFocused}}' />
을 입력하면 focus-on
이 실제로 사용자의 지시어 이름입니다.
대신을 시도해보십시오
HTML
<div ng-app='foo'>
<form ng-controller='FormCtrl' ng-submit='submit()'>
<input focus-on focused='isFocused' />
<button>Submit</button>
</form>
</div>
자바 스크립트
app.directive('focusOn', function() {
return {
scope: { focused: '=' },
link: function(scope, element) {
scope.$watch('focused', function (newValue) {
console.log('$watch', newValue)
if (newValue) {
element[0].focus();
}
});
element.bind('blur', function() {
scope.focused = false;
scope.$apply(); // required so that the scope is updated correctly.
console.log('blur');
});
}
};
});
app.controller('FormCtrl', function ($scope) {
$scope.submit = function() {
$scope.isFocused = true;
console.log('submit');
};
});
에게 내가 지시 범위에 isFocused
속성을 결합하는 focused
속성을 생성 (내가 가질 수 이름은입니다.,하지만 이상한 것 같아 <input type="text" focus-on focus-on="isFocused" />
).
Here's 업데이트 된 jsFiddle
업데이트 : 속성 이름을 ng-model
에서 focused
으로 변경 했으므로 더 적절합니다.
D' oh. 나는이 $ 적용 물건을 잘 알고 있었지만, 나는 다른 것들을 시험해 보면서 그것을 간과했다. 감사! – thatmarvin
+1, 잘 발견되었습니다. 나는 아직도이 $ 관측 방법이 최선인지 모르겠다. $ broadcast/$ on은 짧고 유지 보수가 쉬운 코드에서 같은 결과를 얻는다.나는 내가 실종 된 이유가 있다면 확신 할 수 열려 있습니다! – mikel
@mikel 실제로 http://stackoverflow.com/a/14205885/457519에서 $ observe를 훔쳤지 만 대신 $ watch를 사용하여 최종 해결책을보십시오 : http://jsfiddle.net/thatmarvin/e9H5x/. 불일치 이벤트 문자열로 인해 자동으로 실패 할 때 여러 인스턴스가 실행 되었기 때문에 이벤트를 사용하지 않는 것이 좋습니다. 적어도 변수가 정의되지 않은 경우 오류가 표시됩니다. 게다가 빈 필드를 제출하는 것 외에도 필드에 집중해야하는 이유가 있기 때문에 이벤트 문자열을 하드 코딩하고 싶지 않습니다. 그냥 여기에 이벤트를 적절히 사용하는 것처럼 보이지 않습니다. – thatmarvin