2016-05-27 1 views
0

グリフコンクラス切り替えの三項演算子がうまく動作するが、私のカスタムツールチップディレクティブで動作しないような問題がある。それはちょうどデフォルトのAdd Projectのままで、Update Projectに切り替わりません。私のカスタムディレクティブとは明らかに関係があります。 $digestサイクルを強制するか、$watchを追加する必要がありますか?私はAngularには比較的新しいので、これに関するいくつかの援助を大いに感謝しています。ブートストラップツールチップとのディレクティブアトリビュートバインド

HTML:

<span class="glyphicon glyphicon-{{ currentproject ? 'arrow-up' : 'plus'}}" 
     ng-click="PostProject(currentproject)" 
     tooltip="{{ currentproject ? 'Update' : 'Add'}} Project"> 
</span> 

カスタム指令:

app.directive('tooltip', function() { 
    return { 
     restrict: 'A', 
     scope: { 
      tooltip: '@' 
     }, 
     link: function ($scope, element, attrs, ctrl) { 
      $(element).tooltip({ 
       title: $scope.tooltip 
      }); 
     } 
    }; 
}); 
+1

こんにちは小石は、ブートストラップを使用して処理するために書かれたライブラリがありますAngular Bootstrap(https://angular-ui.github.io/bootstrap/)と呼ばれるあなたのためにこれを処理します。明らかにこれを使用したくないので、私はそれを答えにしません。 – George

+0

@GeorgeLeeありがとう、これは将来の使用のために知っていることは素晴らしいことです。私は実際にこの習慣の指示が現時点で必要なだけで、ほとんどの時間はすでに働いています。 –

答えて

0

と@hansmaadとthisに基づいてしようとして助け、ここでは最終的な解決されています

$scope.$watch('tooltip', function (newValue, oldValue) { 
    $(element) 
     .tooltip({ 
      title: newValue 
     }) 
     .attr('data-original-title', newValue); 
}) 
1

はい、あなたはツールチップに$watchを追加する必要があります。 Angularは、式の値が変更された場合、魔法のように$().tooltip()を呼び出すことはできません。すべてのクレジット付き

link: function ($scope, element, attrs, ctrl) { 
     $scope.$watch('tooltip', function(newValue) { 
      updateTooltip(newValue); 
      // this does'nt update the existing bs tooltip: 
      // see http://stackoverflow.com/a/9875490/498298 
      // $(element).tooltip({ title: newValue }); 
     }); 
    } 

http://codepen.io/hansmaad/pen/QEWwdw?editors=1010

+0

私はこれを正確にコピーしましたが、まだ更新されていないようです...あなたは理由を考えることができますか? –

+0

@ChuckieSullivan Hm、私は例を加えました。私のために働く。 – hansmaad

+0

それは問題の原因となっている角度ではなく、ブートストラップ/ jqueryと関係しています。あなたの純粋なJSと角度の例は私のシナリオでテストすると完全に動作します。状況を修正した '$ watch'の中で' $(element).tooltip( 'destroy'); 'を最初に追加しようとしましたが、最初の' $ watch'の変更の後では、もう仕事はありません。提案? @hansmaad –

関連する問題