使用ng-repeat在Angular 1.5.8中放置自定义指令不起作用

时间:2016-09-06 11:28:36

标签: javascript angularjs angularjs-directive

我使用ng-repat指令在我的HTML中即时发布我的自定义指令。

但是不会评估自定义指令,如果直接在HTML上放置相同的指令,那么它就可以了。

...
    <body ng-app="docsSimpleDirective">
      <div ng-controller="Controller">
      <div>This is a Problem</div>
    <!--Here in for loop i want to us the value to call a directive-->

    <div ng-repeat="var in arr">

      <!--Here i am using directive with restrict: 'C' and this is not expending-->
      <span class="{{var}}"></span>
    </div>


    <!-- here my directive named "direct" is working fine -->
      <span class="direct"></span>

    </div>
    </body>
...

和我的Js代码是

(function(angular) {
  'use strict';
angular.module('docsSimpleDirective', [])
  .controller('Controller', ['$scope', function($scope) {
    $scope.arr = ['direct','indirect']; 
  }]).directive('direct', function() {
    return {
      template: 'direct',
       restrict: 'C'
    };
  }).directive('indirect', function() {
    return {
      template: 'indirect',
      restrict: 'C'
    };
  });
})(window.angular);

我相信有一些编译问题,我搜索了网页,发现$ compile可以解决我的目的但无法实现。

请帮我解决我的问题。

Plunker实现相同:https://plnkr.co/edit/lYGg0UkQpNhN5NJx13Zj?p=preview

2 个答案:

答案 0 :(得分:0)

将指令用作类是不好的做法(因为不可读) https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md#restrict-to-elements-and-attributes

然后你将一个指令作为一个类传递,但是通过插值动态地传递,这本身就是不好的做法(https://docs.angularjs.org/guide/interpolation#known-issues)。类名称被插值并且元素被渲染,但是在插值期间不会编译指令。

从指令定义中删除限制行并将其用作属性:

<span indirect></span>

然后在ng-repeat循环中使用它们,你可以检查var =&#34; direct&#34;或&#34;间接&#34;

https://plnkr.co/edit/JUNFMCZASMntCnC6FsIO?p=preview

答案 1 :(得分:0)

使用像这样的指令

.directive('direct', function() { return { template: 'direct', restrict: 'A' };

并在控制器中将restrict定义为属性。

class App: def __init__(self, master):