有条件地创建内容的角度指令

时间:2016-06-01 10:37:59

标签: javascript angularjs angularjs-directive

我试图编写一个指令,以便创建一个属性为if-login-service="facebook"的元素,但是该属性的任何其他值的元素都不会。

到目前为止,我使用此指令取得的进展如下所示

app.directive('ifLoginService', function($compile) {

  return {
    restrict: 'EA',
    compile: function compile(element, attrs) {

      return function($scope, $element, $attr) {

        var serviceName = attrs.ifLoginService;

        if (serviceName === 'facebook') {

          // use compile to include and compile your content here
          $compile($element.contents())($scope);
        }
      }
    }
  };
});

A Plunker demo可在此处获取。如果它正在运作,那么" Facebook"将显示按钮,而不是Facebook"按钮不会。目前显示两个按钮,但我不确定我哪里出错。

1 个答案:

答案 0 :(得分:2)

您应该使用编译服务来编写指令。

$compile('your html content here')($scope);

要清除根元素(如按钮),请使用此选项:

$element[0].html('');

或者从DOM中删除它:

$element[0].parentNode.removeChild($element[0]);

这是您修复的指令:

var app = angular.module('plunker', ['ngSanitize']);

app.controller('MainCtrl', function($scope) {
  $scope.model = {
    toggle: 'true'
  };
});

app.directive('ifLoginService', function($compile,$animate) {

  return {
    restrict: 'EA',
    replace: true,
    compile: function compile(element, attrs) {

      return function($scope, $element, $attr) {

        var serviceName = attrs.ifLoginService;
        console.debug('Testing service name', serviceName);

        if (serviceName === 'true') {
          // use compile to include and compile your content here
          $element.html($compile($element.contents())($scope));
        }
        else
        {
          $element[0].parentNode.removeChild($element[0]);
        }
      }
    }
  };
});

链接到plunkr here