この問題の解決の鍵は、そのあなたです$コンパイルサービスを使用する必要がありますoptionsオブジェクトのformatNoMatches
関数によって返されたHTMLにこのコンパイルのステップでは、マークアップのng-clickディレクティブがスコープに接続されます。残念ながら、これはやや簡単です。
あなたがここにフル実施例を参照することができます:私はAngularJSは、検索の結果を監視するためSELECT2コントロールを鑑賞するための知っている方法はありませんhttp://jsfiddle.net/jLD42/4/を
、私たちは時にコントローラに通知しなければなりません結果は見つかりません。これはformatNoMatches
関数を使用して行うのは簡単です:
$scope.select2Options = {
formatNoMatches: function(term) {
console.log("Term: " + term);
var message = '<a ng-click="addTag()">Add tag:"' + term + '"</a>';
if(!$scope.$$phase) {
$scope.$apply(function() {
$scope.noResultsTag = term;
});
}
return message;
}
};
$scope.noResultsTag
プロパティはマッチを返されていないユーザーが入力した最後の値を追跡します。 formatNoMatches
がAngularJSダイジェストループのコンテキスト外で呼び出されるため、$scope.noResultsTag
への更新を$ scope。$ applyでラップする必要があります。
我々は$scope.noResultsTag
を見て、変更が発生したときformatNoMatches
マークアップをコンパイルすることができます
$scope.$watch('noResultsTag', function(newVal, oldVal) {
if(newVal && newVal !== oldVal) {
$timeout(function() {
var noResultsLink = $('.select2-no-results');
console.log(noResultsLink.contents());
$compile(noResultsLink.contents())($scope);
});
}
}, true);
あなたは$タイムアウトが何をしているのか不思議に思うかもしれません。これは、formatNoMatches
マークアップでDOMを更新するselect2コントロールと、そのマークアップをコンパイルしようとするウォッチ関数との間の競合状態を回避するために使用されます。それ以外の場合は、$('.select2-no-results')
セレクタが探しているものを見つけられず、コンパイルステップでコンパイルするものがない可能性があります。
追加タグリンクがコンパイルされると、ng-click
指示文はコントローラのaddTag
関数を呼び出すことができます。あなたはjsFiddleでこれを見ることができます。 [タグを追加]リンクをクリックすると、タグ配列がselect2コントロールに入力した検索用語で更新され、次回select2コントロールに新しい検索用語を入力するときにマークアップとオプションリストに表示されます。
あなたはそれをスコープに追加できますか? ie。 $スコープ。addTag = function(){ } – insomiac
私は何度も同じ問題で戦ってきました。私たちが作っているタグについて角度を知らせる必要があるという気持ちがあります。しかし、私はどのように把握することはできません。 – Manu