2016-07-03 10 views
1

新しいカスタムanglejs指示文(d-emails)を作成しました。このディレクティブのテンプレートには、 "ng-if"ディレクティブが含まれています。そして、この指示文では、 "replace:true"を見ることができます。この主な理由は、指示文の中でユーザーの役割をチェックしたいからです。ユーザーがhtmlから要素全体を削除する適切な役割を持っていないとします。私はhtmlの中にclass = "col-sm-6"という要素を残したくない。しかし、私がこのコードを書いたとき、私はこの場合、隔離されたスコープを使うことができないことを認識しています。 Ng - 孤立スコープが削除され、親スコープから継承された新しいスコープが追加されました。どのようにこの状況を管理するための任意の提案? このような質問はIssue with isolated scope and "replace: true" in angular directiveのように見えましたが、適切な解決策が見つかりませんでした。角度指示文でng-ifを "replace:true"に変更する

D-emails.tmpl.htmlはこのようになります
function dEmails() { 
    var directive = { 
     scope: {}, 
     bindToController: { 
      entityId: "=", 
      entityType: "=" 
     }, 
     controllerAs: "vm", 
     templateUrl: "/directives/d-emails.tmpl.html", 
     restrict: "E", 
     controller: dEmailsController, 
     replace: true 
    }; 
    return directive; 
} 

dEmailsController.$inject = ['roleService']; 

function dEmailsController(roleService) { 
    var vm = this; 
    init(); 
    var roleId = 4; 
    vm.isApproved = false; 

    function init() { 
     roleService.hasRole(roleId).then(function(isApproved) { 
      vm.isApproved = isApproved; 
      if (isApproved) { 
       emailResource.get({ entityId: vm.entityId, entityType: vm.entityType }).$promise.then(function(response) { 
        vm.list = response.Result;       
       }); 
      } 
     }); 
    } 
} 

:だけの要素を削除する場合はNGを-

<d-emails class="col-sm-6" entity-id="vm.entityId" entity-type="vm.entityType.event"> 
</d-emails> 

答えて

1

の代わりに使用した:私はこのディレクティブを使用し

<div class="email-item" ng-if="vm.isApproved"> 
    <div>Content of my super directive</div> 
</div> 

とコードin vm.isApprovedがfalseの場合は、inディレクティブです。

+0

ありがとうございました!場合によっては、反対側の問題を見るのが有益な場合もあります: –

+0

この解決策にもう一度コメントしてください。この場合のテンプレートは前にレンダリングされます。もちろん、テンプレートのルートに "ng-show"のようなものを追加することはできますが、これが最善の解決策ではないと私は考えています。 –

関連する問題