私のディレクティブは html を正しく挿入していません。挿入する前にhtmlをコンパイルする必要があると思いますが、これを行う方法が正確にはわかりません。私のテンプレートは初めて正常に動作しますが、置き換えられると ng-click() イベントが登録されず、html は通常のアンカー タグとして応答します。
誰かがベストプラクティスを手伝ってくれれば、これをもっときれいに書く方法もあるでしょう。明らかにテスト目的で、置き換えられたサインアウト テキストで openSigninDialog() イベントを使用しているだけです。
指令
app.directive('navbarright', function() {
return {
restrict: "A",
template: "<li><a href='#'>New</a></li>"+
"<li><a href='' ng-click='openSigninDialog()'>Sign In</a></li>",
link: function (scope, elem, attrs) {
scope.$on('event:auth-signinConfirmed', function() {
elem.html("<li><a href='#'>New</a></li>"+
"<li><a href='' ng-click='openSigninDialog()'>Sign Out</a></li>");
});
}
}
});
コントローラ
app.controller('NavbarRightCtrl', function($scope) {
console.log('signin event occuring');
$rootScope.$broadcast('event:auth-signinConfirmed');
});
HTML
<ul class="nav pull-right" ng-controller="NavbarRightCtrl" navbarright>
</ul>