【问题标题】:How to get ng-repeat to work inside of a directives template如何让 ng-repeat 在指令模板中工作
【发布时间】:2015-03-02 20:31:02
【问题描述】:

问题:编译语法 {{vm.names}} 吐出变量,所以我知道视图可以访问它。但是,在像 ng-repeat 这样的指令中使用 vm.names 没有效果。我做了一个 console.log(typoeof()) ,上面写着“对象”,所以我知道它不是字符串。

代码:

 function nameDirective (){
    return {
      template: [
        '{{vm.names}}',
        '<tr ng-repeat"name in vm.names">',
          '<td>{{name.id}}</td>',
          '<td>{{name.fName}}</td>',
          '<td>{{name.lName}}</td>',
        '</tr>'
      ].join(''),
      "scope":{
        names:"="
      },
      "controller": nameDirectiveCtrl,
      "controllerAs": 'vm'
    };
  }

  function  nameDirectiveCtrl($scope) {
    var vm = this;

    vm.names = $scope.names;
  }

演示http://plnkr.co/edit/6vlqXFshSxPe5b3Wu7mf?p=preview

【问题讨论】:

    标签: javascript angularjs angularjs-nvd3-directives


    【解决方案1】:

    首先请注意,您在ng-repeat"name in vm.names" 中缺少=。但这不是真正的问题。

    另一个问题是如果你使用&lt;name-directive names="vm.names"&gt;&lt;/name-directive&gt;,你需要添加restrict: 'E'。但这也不会渲染任何东西。

    之后我意识到你还需要replace: true。在这种情况下,ngRepeat 可以工作,但很奇怪......行会出现在表格之外!

    http://plnkr.co/edit/y8Wr2j1mLc3UFvFKo7IB?p=preview

    嗯..所以这是解决方案。

    这是极少数情况下您应该使用限制为注释的指令。您当前方法的问题是&lt;name-directive&gt; 元素不能是tbody 的直接子元素,因此浏览器修复了将您的元素指令移动到外部其他地方的无效标记。

    下面是带有注释语法的固定指令代码:

    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>First Name</th>
                <th>Last Name</th>
            </tr>
        </thead>
        <tbody>
            <!-- directive: name-directive vm.names -->
        </tbody>
    </table>
    

    指令看起来像:

    function nameDirective() {
        return {
            restrict: 'M',
            template: [
                '<tr ng-repeat="name in vm.names">',
                    '<td>{{name.ID}}</td>',
                    '<td>{{name.fName}}</td>',
                    '<td>{{name.lName}}</td>',
                '</tr>'
            ].join(''),
            scope: {
                names: "=nameDirective"
            },
            replace: true,
            controller: nameDirectiveCtrl,
            controllerAs: 'vm'
        };
    }
    

    演示: http://plnkr.co/edit/qTII5HdZP1gXKKZjOXTu?p=preview

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多