【问题标题】:Directive inside directive in AngularJS?AngularJS中的指令内部指令?
【发布时间】:2014-03-01 16:15:16
【问题描述】:

我正在尝试创建一个包含另一个指令(在 AngularJS UI 中定义)的指令,但它似乎不起作用。

这是我的html:

<div class="col-md-12" ng-show="continent == '2'">
       <my-rating></my-rating>
</div>

还有指令:

.directive('myRating', function() {

return{
    restrict: 'E',
    template: '<div class="row question">{{questions.3A.name}}</div> \
              <div class="row rating" ng-controller="RatingDemoCtrl"> \
                <rating value="rate" max="max" readonly="isReadonly" state-on="\'glyphicon-star rated\'" state-off="\'glyphicon-star\'"></rating> \
                  <div class="col-md-12"> \
                    <button class="btn btn-sm btn-danger form-control" ng-click="rate = 0" ng-disabled="isReadonly">Clear</button> \
                  </div>  \
              </div>',
    replace: true,
    scope: {
        text: '@'
    }
};
})

我从一个有效的指令中复制了这样的指令,一旦我删除代码并只留下 div class="col-md-12",它就会起作用。否则,Angular 会崩溃。

我错过了什么?

编辑:我添加了Plunker。有问题的指令在 script.js 的第 34-42 行),否则一切正常。

编辑 2:这是控制台错误:

Error: [$compile:tplrt] http://errors.angularjs.org/1.2.13/$compile/tplrt?p0=myRating&p1=
at Error (native)
at file:///C:/Users/Zuh/Desktop/ANGULARJS/js/lib/angular.min.js:6:450
at Wa (file:///C:/Users/Zuh/Desktop/ANGULARJS/js/lib/angular.min.js:51:416)
at L (file:///C:/Users/Zuh/Desktop/ANGULARJS/js/lib/angular.min.js:43:62)
at L (file:///C:/Users/Zuh/Desktop/ANGULARJS/js/lib/angular.min.js:43:184)
at L (file:///C:/Users/Zuh/Desktop/ANGULARJS/js/lib/angular.min.js:43:184)
at L (file:///C:/Users/Zuh/Desktop/ANGULARJS/js/lib/angular.min.js:43:184)
at L (file:///C:/Users/Zuh/Desktop/ANGULARJS/js/lib/angular.min.js:43:184)
at Y (file:///C:/Users/Zuh/Desktop/ANGULARJS/js/lib/angular.min.js:41:360)
at Wa (file:///C:/Users/Zuh/Desktop/ANGULARJS/js/lib/angular.min.js:51:164) angular.min.js:85

【问题讨论】:

  • 你能创建一个 plunkr 吗?
  • 我认为您的模板应该有一个根元素。将完整的模板包装在 div 中。并查看浏览器控制台是否有错误。
  • 控制台中的错误说明了什么?可能是在抱怨没有根元素。

标签: javascript angularjs using-directives


【解决方案1】:

来自你的朋友:

Error: [$compile:tplrt] Template for directive 'myRating' must have exactly one root element.

【讨论】:

    【解决方案2】:

    正如 Chandermani 和 Matt 都指出的那样,问题在于模板没有根元素。一个额外的 div 修复了它。谢谢大家!!

    .directive('myRating', function() {
    
    return{
        restrict: 'E',
        template: '<div>\
                    <div class="row question">{{questions.3A.name}}</div> \
                    <div class="row rating" ng-controller="RatingDemoCtrl"> \
                      <rating value="rate" max="max" readonly="isReadonly" state-on="\'glyphicon-star rated\'" state-off="\'glyphicon-star\'"></rating> \
                      <div class="col-md-12"> \
                        <button class="btn btn-sm btn-danger form-control" ng-click="rate = 0" ng-disabled="isReadonly">Clear</button> \
                      </div>  \
                    </div> \
                  </div>',
        replace: true,
        scope: {
            text: '@'
        }
    };
    
    
    })
    

    【讨论】:

    • 这对我不起作用。我的模板和你的方案一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多