2016-03-25 6 views

答えて

3

link関数は、あなたが考えているようにHTMLを返すためのものではありません。スコープがディレクティブ要素にリンクされている場合、角コンパイルされたDOMを制御することを基本的に意図しています。あなたは指示のtemplate/templateUrlオプション以上のHTMLを持つことができます。条件付き要素を使用する場合はng-ifを使用します。

指令

.directive('jobTemplate', function() { 
    return { 
    restrict: 'AE', 
    replace: true, 
    template: '<p>'+ 
     '<span ng-if="job.JobStatus == \'Created\'">{{job.id}} was created.</span>'+ 
     '<span ng-if="job.JobStatus == \'Processing\'">{{job.id}} is currently processing.</span>'+ 
     '</p>', 
    link: function(scope, element, attrs) {} 
    }; 

}) 

Demo here

0

あなたが実装されている方法は、あなたがDOMの一部を追加または削除条件ままにする必要がありcorrect..butでこのコードhttps://plnkr.co/edit/cpdAqWN0SeUx5Gy9CQkR?p=preview

app.directive('jobTemplate', function($compile){ 
    return { 
restrict: 'AE', 
replace: true, 
link: function(scope,element, attrs) { 
    console.log(element) 
    var JobStatus = scope.job.JobStatus; 
    var text = "<p>"; 

    if(JobStatus === 'Created'){ 
     text += "{{job.id}} was created." 
    } 

    else if(JobStatus === 'Processing'){ 
     text += "{{job.id}} is currently processing." 
    } 

    text += "</p>"; 
    element.html(text); 
    $compile(element.contents())(scope); 
} 
}; 
}) 
+0

を試してみてください'ng-if'を使っているので、' job'値がajaxによって読み込まれると問題はありません。 –

+0

これも指示の範囲内で行うことができます。以前私はwordpress SPAで作った。長すぎるディレクティブなので、すべてのことは言い表せませんが、** scopeを使用して管理しました。$ watch( '$ viewContentLoaded'、function(){})**内のディレクティブです。 –

+0

$ viewContentLoadedが読み込まれたウォッチはうまくいきません。あなたは 'job'の上にウォッチを置く必要がありますが、それは' $ watch'をコードに入れるのは悪い習慣です。ウォッチャーを避けるようにしてくださいそのコードはもっとクリーナーになります.. –

関連する問題