2016-02-10 138 views
0

我想在我的角度指令中动态添加模板。我已经使用链接函数将该变量编译为如此answer中给出的html元素。在指令中动态添加模板

但我无法使它工作。

这是我的html:

<spinners></spinners> 

这是我的指令:

app.directive('spinners', function() { 
    return { 
     restrict: 'E', 
     link: function(scope, element, attrs) { 
      var spinkit = ["<rotating-plane-spinner></rotating-plane-spinner>", "<double-bounce-spinner></double-bounce-spinner>", "<wave-spinner></wave-spinner>", "<wandering-cubes-spinner></wandering-cubes-spinner>", "<pulse-spinner></pulse-spinner>", "<chasing-dots-spinner></chasing-dots-spinner>", "<circle-spinner></circle-spinner>", "<three-bounce-spinner></three-bounce-spinner>", "<cube-grid-spinner></cube-grid-spinner>", "<word-press-spinner></word-press-spinner>", "<fading-circle-spinner></fading-circle-spinner>"]; 
      var spinner = spinkit[Math.floor(Math.random() * spinkit.length)]; 
      var el = angular.element(spinner); 
      compile(el.contents())(scope); 
      element.replaceWith(el); 
     } 
    }; 
}); 

其实我正在使用的Angular-SpinKit在我的加载页面随机显示的微调。当我直接使用spinkit的单个指令时,它可以工作。但是当我使用上述方法时,我无法在我的html页面中找到任何内容。

+0

编译不会工作方式我猜。你需要将它作为一个依赖项并在链接函数中作为$ compile使用,那么它应该可以工作。 –

回答

0

貌似问题是在这条线compile(el.contents())(scope);

compile应该$compile,这是一个服务,它应该被注入指令。

所以:$compile(el.contents())(scope);app.directive('spinners', function($compile) {

app.directive('spinners', function($compile) { 
    return { 
     restrict: 'E', 
     link: function(scope, element, attrs) { 
      var spinkit = ["<rotating-plane-spinner></rotating-plane-spinner>", "<double-bounce-spinner></double-bounce-spinner>", "<wave-spinner></wave-spinner>", "<wandering-cubes-spinner></wandering-cubes-spinner>", "<pulse-spinner></pulse-spinner>", "<chasing-dots-spinner></chasing-dots-spinner>", "<circle-spinner></circle-spinner>", "<three-bounce-spinner></three-bounce-spinner>", "<cube-grid-spinner></cube-grid-spinner>", "<word-press-spinner></word-press-spinner>", "<fading-circle-spinner></fading-circle-spinner>"]; 
      var spinner = spinkit[Math.floor(Math.random() * spinkit.length)]; 
      var el = angular.element(spinner); 
      $compile(el.contents())(scope); 
      element.replaceWith(el); 
     } 
    }; 
}); 
+0

是的。我在评论中对他也一样。 –

+0

试过这个,它不起作用。什么都没有显示在HTML页面中。 – v1shnu

0

试试这个:

app.directive('spinners', function($compile) { 
return { 
    restrict: 'E', 
    link: function(scope, element, attrs) { 
     var spinkit = ["<rotating-plane-spinner></rotating-plane-spinner>", "<double-bounce-spinner></double-bounce-spinner>", "<wave-spinner></wave-spinner>", "<wandering-cubes-spinner></wandering-cubes-spinner>", "<pulse-spinner></pulse-spinner>", "<chasing-dots-spinner></chasing-dots-spinner>", "<circle-spinner></circle-spinner>", "<three-bounce-spinner></three-bounce-spinner>", "<cube-grid-spinner></cube-grid-spinner>", "<word-press-spinner></word-press-spinner>", "<fading-circle-spinner></fading-circle-spinner>"]; 
     var spinner = spinkit[Math.floor(Math.random() * spinkit.length)]; 
     var el = angular.element(spinner); 
     element.replaceWith(el); 
     $compile(el)(scope); 

    } 
}; 
}); 
+0

试过这个,它不起作用。什么都没有显示在HTML页面中。 – v1shnu

+0

你可以做一个codepen或什么的? –

+0

我已编辑我的答案。让我知道它是否有效。 –