0

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

1 回答 1

0

我想错了。我最终使用了 angularjs 内置的 ng-show 和 ng-hide 指令。

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

});
于 2013-03-19T08:09:00.333 回答