特定のフィールドが無効であることをユーザーに示すためにangle-uiのツールチップ機能を使用しようとしていますが、ツールチップはいくつかの事前定義されたトリガーでのみ表示できるようです。これらのトリガー以外のツールチップをトリガーする方法はありますか?
例えば:
<input
type="text"
tooltip="Invalid name!"
tooltip-position="right"
tooltip-trigger="myForm.username.$invalid">
ここにトリックがあります。
Twitter Bootstrap tooltips (Angular-UIが依存する)には、data-trigger="mouseenter"
のように追加の属性でトリガーイベントを指定するオプションがあります。これにより、トリガーをプログラムで(Angularを使用して)変更できます。
<input
ng-model="user.username"
name="username"
tooltip="Some text"
tooltip-trigger="{{{true: 'mouseenter', false: 'never'}[myForm.username.$invalid]}}"
/>
したがって、username
が$ invalidの場合、tooltip-trigger
expressionは'mouseenter'
と評価され、ツールチップが表示されます。それ以外の場合、トリガーは'never'
に評価され、代わりにツールチップを起動しません。
編集:
@cotten(コメント)は、ツールチップがスタックし、モデルが有効であっても消えないシナリオについて言及しています。これは、テキストの入力中にマウスが入力フィールド上に留まると発生します(モデルが有効になります)。モデル検証がtrueと評価されるとすぐに、tooltip-trigger
は「never」に切り替わります。
UI BootstrapはtriggerMap
と呼ばれるものを使用して、ツールチップを表示/非表示するマウスイベントを決定します。
// Default hide triggers for each show trigger
var triggerMap = {
'mouseenter': 'mouseleave',
'click': 'click',
'focus': 'blur'
};
ご覧のとおり、このマップは「never」イベントについて何も認識していないため、いつツールチップを閉じるかを判断できません。したがって、トリックプレイをうまく行うには、独自のイベントペアでこのマップを更新するだけでよく、UI Bootstrapはtooltip-trigger
が「never」に設定します。
app.config(['$tooltipProvider', function($tooltipProvider){
$tooltipProvider.setTriggers({
'mouseenter': 'mouseleave',
'click': 'click',
'focus': 'blur',
'never': 'mouseleave' // <- This ensures the tooltip will go away on mouseleave
});
}]);
注:$ tooltipプロバイダーは "ui.bootstrap.tooltip"モジュールによって公開され、アプリ構成でツールヒントをグローバルに構成できます。
私は別のものを試しました
tooltip="{{(myForm.input1id.$invalid) ? 'You have an error with this field' : ''}}"
この方法では、入力が無効な場合にのみツールチップに何かが書き込まれ、何も書き込まれていない場合、ツールチップは表示されません。
バージョン0.12.0以降、tooltip-tigger
は観察できなくなりました(したがって、プログラムで変更することはできません)。
tooltip-enable
を使用して同じ動作を取得できます。詳細はこちらをご覧ください: https://github.com/angular-ui/bootstrap/issues/3372
フィールドにtooltip-enable
の代わりにtooltip-trigger
を追加することもできます。
<input
type="text"
tooltip="Invalid name!"
tooltip-position="right"
tooltip-enable="{{myForm.username.$invalid}}">
この場合、ユーザー名が無効な場合($ invalidはtrue
を返します)、ツールチップが表示されます。
新しいバージョンのドキュメントに従って、以下のHTMLを使用することをお勧めします。 stewieの答えは、最新バージョンでは役に立ちません。
<input class="form-control" name="name" type="text" required ng-model="name"
uib-tooltip="name required" tooltip-is-open="formname.name.$invalid"
tooltip-trigger="none" tooltip-placement="auto top" />
tooltip-is-open="formname.name.$invalid"
のフォーム名のみを置き換えます
準備できた。