現在のソリューション
このソリューションは理想的ではないようですが、ディレクティブ自体に実装されたソリューションの代わりに、これが機能する唯一の方法でした:
以下が必要です。
- 新しいタグ テンプレート
- タグ テンプレートによって暗黙的に使用される新しいディレクティブ
- タグクリックの処理を担当する新しいディレクティブ
注意すべき点がいくつかあります。
- 私はコーヒースクリプトを使用しています
- 実装ビューでcontroller-as構文を使用しています
タグ テンプレート
これは、カスタム タグ テンプレートの作成に関するプロジェクトのドキュメントから直接借用して変更したものです。
<div nx-tag class="tag-template">
<div>
<a href="" tabindex="-1" ng-click="$tagClicked(data)"><span>{{$getDisplayText()}}</span></a>
<a class="remove-button" ng-click="$removeTag()">✖</a>
</div>
</div>
暗黙的なタグ ディレクティブ
上記のテンプレートで気付いた場合、私は を使用しており、そこで関数 nx-tag
を作成しています。$tagClicked
.directive 'nxTag', ->
{
restrict: 'AC'
link: ($scope, elem, attrs)->
$scope.$tagClicked = (data)->
$scope.$emit 'nxTag.clicked', data
}
on-tag-click ディレクティブ
.directive 'onTagClick', ($parse)->
{
link: ($scope, elem, attrs)->
clickFunc = if attrs.onTagClick then $parse attrs.onTagClick else angular.noop
$scope.$on 'nxTag.clicked', (evt, tagData)->
evt.preventDefault()
evt.stopPropagation()
clickFunc $scope, {data: tagData}
}
実装する
<tags-input ng-model="vc.viewData.tags" template="nx-tag-item.html"
on-tag-removed="vc.save()" on-tag-added="vc.save()"
on-tag-click="vc._test(data)">
<auto-complete source="vc.getTags($query)"></auto-complete>
</tags-input>