【问题标题】:Template for directive 'selectUser' must have exactly one root element指令“selectUser”的模板必须只有一个根元素
【发布时间】:2018-08-08 12:13:04
【问题描述】:

我在多个地方使用指令 select-user ,并且一切正常。但是当我在指令 html 模板中添加一个新的 html 元素位置时的问题。如果我在 div 元素中使用,则两者都不起作用。

总是错误返回“指令'selectUser'的模板必须只有一个根元素”

我必须添加一个复选框并根据复选框值更改想要更改数据源。

这样的指令调用

<select-user ng-model="UserId"></select-user>

我在 js 文件中有一个指令代码

App.directive('selectUser', ['$http', '$timeout', '$rootScope', function ($http, $timeout, $rootScope) {
    return {
        restrict: 'E',
        require: 'ngModel',
        templateUrl: 'app/shared/partial/userlist.html',
        replace: true,
        scope: {
            isDisabled: '=?', // optional                     

        },
        link: function (scope, element, attr, ngModelCtrl) {
            scope.$watch('isDisabled', function (newVal) {
                scope.accessDisabled = newVal;

                if (newVal == undefined || newVal == null) {
                    scope.accessDisabled = false;
                }
            });

            scope.LoadUsers = function () {

                scope.teamUsers = response;//data from API.

        }
        }
    };
}]);

用户列表.html

 <select id="teamUsers" data-placeholder="Select User" chosen="" class="chosen-select input-md"
            ng-options="user.EncryptedID as user.EmployeeName+' '+user.EmployeeLastName+', '+user.TeamName  for user in teamUsers"
            ng-disabled="accessDisabled">
        <option disabled></option>

    </select>

-- 错误html

<select id="teamUsers" data-placeholder="Select User" chosen="" class="chosen-select input-md"
                ng-options="user.EncryptedID as user.EmployeeName+' '+user.EmployeeLastName+', '+user.TeamName  for user in teamUsers"
                ng-disabled="accessDisabled">
            <option disabled></option>

        </select>


 <input type="checkbox" /> 

【问题讨论】:

  • 嗯,新的 HTML 有两个根元素(&lt;select&gt;&lt;input&gt;)...将它们包裹在另一个元素中,例如 &lt;label&gt;&lt;span&gt;...跨度>

标签: angularjs web


【解决方案1】:

你必须包装你的元素,angularjs 每个视图需要一个根元素。

在你的情况下,你可以这样做:

<div class="mywrapper">
    <select
        id="teamUsers"
        data-placeholder="Select User"
        chosen=""
        class="chosen-select
        input-md"
        ng-options="user.EncryptedID as user.EmployeeName+' '+user.EmployeeLastName+', '+user.TeamName  for user in teamUsers"
        ng-disabled="accessDisabled"
    >
        <option disabled></option>
    </select>
    <input type="checkbox" />
</div>

【讨论】:

  • 感谢您的回答。但已经尝试过,我面临另一个错误控制器 'ngModel',指令 'ngOptions' 需要,找不到!
  • 这是您在此处提到的另一个问题,查看此回复可能对您有所帮助stackoverflow.com/questions/21807834/…
猜你喜欢
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 2016-09-07
  • 2017-02-02
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多