Google Maps Autocomplete の Geocomplete プラグインをラップする AngularJS ディレクティブを作成しました。既存の要素に「geocomplete」属性を追加することで指定されるスコープのプロパティにバインドしようとしています。
geocompleteModule.directive("geocomplete", function ($log, $timeout, $compile, $controller) {
return {
restrict: 'A',
priority: 200,
link: function (scope, element, attrs, ctrl) {
var autocomplete = $(element).geocomplete().bind("geocode:result", function (event, result) {
if(result.geometry && result.geometry.location) {
var location = result.geometry.location;
scope.$apply(function (s) {
s[attrs.geocomplete] = new Models.Point(location.lat(), location.lng());
});
}
});
}
};
});
ただし、geocomplete 属性で参照されるプロパティがサブプロパティである場合、これは機能しません。例えば:
<input geocomplete="location" />
動作します。
<input geocomplete="search.location" />
動作しないでしょう。
本来、AngularJS は独自のバインディングでこれを行うことができるようですが、これを自分で実装するにはどうすればよいでしょうか?
編集
split と for ループを使用してこれを行う方法は知っていますが、おそらくこれは「適切な」方法ではありません。