Angularjs指令编译

时间:2013-03-19 01:05:21

标签: angularjs angularjs-directive

我的指令没有正确插入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>

1 个答案:

答案 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;
};

});