我的指令没有正确插入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>
答案 0 :(得分:0)
我错了。我最终使用了在ng-show和ng-hide指令中内置的angularjs。
HTML
<ul class="nav pull-right" ng-controller="NavbarRightCtrl">
<li><a href="#">New</a></li>
<li ng-hide="signedIn"><a href="" ng-click="signin()" ng-init="load()">Sign In</a></li>
<li ng-show="signedIn">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Bob <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="" ng-click="signout()">Sign Out</a></li>
</ul>
</li>
</ul>
的Javascript
app.controller('NavbarRightCtrl', function($scope, $rootScope) {
$scope.signin = function(){
console.log('signin event');
$rootScope.signedIn = true;
});
$scope.signout = function () {
console.log('signing out');
$rootScope.signedIn = false;
};
$scope.load = function () {
$rootScope.signedIn = false;
};
});