2013-03-19 165 views
0

我的指令没有正确插入html。我想我需要在插入它之前编译html,但我不确定如何做到这一点。我的模板第一次正常工作,但是当它被替换时,ng-click()事件没有注册,并且html作为普通锚定标记进行响应。Angularjs指令编译

如果有人可以帮助我们了解最佳实践,那么可能还有一种更清晰的书写方式。我只是在替换的签名文本上使用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

我要对此错误的。我最终使用了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; 
}; 

});