ディレクティブを理解しようとしていますが、双方向のデータ バインディングに問題があります。
私のディレクティブは、テキストエリアで「Enter」が押されたときにフォームを送信するために使用されます。
別の SO スレッドで解決策を見つけました(以下のディレクティブのスコープ定義のコードを参照してください) が、モデル名を変更するとディレクティブも変更する必要があることを意味するため、好きではありません..
html 部分は次のとおりです。
<div ng-app="testApp" ng-controller="MyController">
<textarea ng-model="foo" enter-submit="submit()"></textarea><br/>
Binding: {{foo}}
</div>
これがJavaScriptの部分です:
var app = angular.module('testApp', []);
function MyController($scope) {
$scope.foo = "bar"
$scope.submit = function() {
console.log("Submitting form");
}
}
app.directive('enterSubmit', function () {
return {
restrict: 'A',
scope: {
submitFn: '&enterSubmit',
foo: '=ngModel' // <------------------- dont't like this solution
},
link: function (scope, elem, attrs) {
elem.bind('keydown', function(event) {
var code = event.keyCode || event.which;
if (code === 13) {
if (!event.shiftKey) {
event.preventDefault();
scope.submitFn();
}
}
});
}
}
});
ご協力いただきありがとうございます !