【问题标题】:Error: [$parse:syntax] Syntax Error: Token 'in' is an unexpected token错误:[$parse:syntax] 语法错误:令牌“in”是一个意外的令牌
【发布时间】:2015-07-30 06:57:24
【问题描述】:

我正在尝试更改自定义指令内下拉列表中的字符串(使用下面的“主题中的主题”)并出现此语法错误。

当我在该元素上将“主题中的主题”表达式设置为 ng-repeat 时,它会重复每个下拉菜单 3 次(即 3 个日期、3 个状态、3 个公司)。像这样:

我在这里唯一想做的就是动态更改每个下拉菜单的主题。任何帮助表示赞赏。

这是我的指令(app.js):

var varMyDirectivesApplication =
        angular.module('myDirectivesApplication', []);

    varMyDirectivesApplication.directive('dropdownMultiselect', function () {
        return {
            restrict: 'E',
            scope: {
                model: '=',
                options: '=',
            },
            template:

            "<div data-ng-class='{open: open}'>" +"<li data-ng-class='{open: open}'>" +
                "<a class='dropdown-toggle'>Select {{ topic in topics }}</a>" +
                "</li>" +

                "<ul class='dropdown-menu' aria-labelledby='dropdownMenu'>" +

                    "<li data-ng-repeat='option in options'>

                        <a>{{option.name}}</li>" +

                "</ul>" +

            "</div>",

            controller: function ($scope) {

                $scope.topics = ['Date', 'Status', 'Company'];

            }

        }

    }

 $scope.dates = [
            { "id": "1 Week", "name": "1 Week" },
            { "id": "2 Weeks", "name": "2 Weeks" },
            ...
 ];

 $scope.statuses = [
      { "id": "Draft", "name": "Draft" },
      { "id": "Inbound", "name": "Inbound" },
      ...
  ];

  $scope.companies = [
       { "id": "ABC Manufacturing", "name": "ABC Manufacturing" },
       ...
  ];

$scope.selectedIds = [];

});

HTML:

<dropdown-multiselect model="selectedIds" options="dates"></dropdown-multiselect>

<dropdown-multiselect model="selectedIds" options="statuses"></dropdown-multiselect>

<dropdown-multiselect model="selectedIds" options="companies"></dropdown-multiselect>

<ul class="list-unstyled margin-0" >
    <li data-ng-repeat="item in selectedIds" class="pointer-hover" ng-click="remove(item)">
        {{ item }}
    </li>
</ul>

【问题讨论】:

  • "topic in topics" 这样的表达式是用ng-repeat="topic in topics" 的微语法编写的。你想要的结果是什么?
  • 我实际上是在重复这个下拉列表中的列表项——还在页面上显示 3 个不同的下拉列表(日期、状态、公司)(上面都没有显示。当我将 ng-repeat 添加到上面的类,它会重复整个下拉菜单 3 次,因此,总共显示 9 个下拉菜单。我会更新上面的代码给你一个更好的主意
  • 为什么在指令中定义$scope.topics?指令应该如何知道作为options 传递的内容以分配正确的主题名称?为什么要将“知识”作为指令的一部分而不是控制器的一部分?

标签: angularjs syntax-error


【解决方案1】:

一种方法是将主题作为属性传递到指令中。

类似这样的:

<dropdown-multiselect model="selectedIds" options="dates" topic="Date"></dropdown-multiselect>

您的指令将如下所示:

varMyDirectivesApplication.directive('dropdownMultiselect', function () {
    return {
        restrict: 'E',
        scope: {
            model: '=',
            options: '=',
            topic: '@'
        },
        template:
            "<div data-ng-class='{open: open}'>" +"<li data-ng-class='{open: open}'>" +
                "<a class='dropdown-toggle'>Select {{ topic }}</a>" +
                "</li>" +
                "<ul class='dropdown-menu' aria-labelledby='dropdownMenu'>" +
                    "<li data-ng-repeat='option in options'>
                        <a>{{option.name}}</li>" +
                "</ul>" +
            "</div>"
    }
}

【讨论】:

  • 这救了我!我有一个指令,我在其中传递了一个 CSRF 令牌,并且它已经运行了很长时间。在我的指令中,我有 scope: {csrf:'='} 并且我开始收到解析错误,因为有一次我运行 CSRF 令牌时以数字开头。我一定有很好的以字母开头的令牌。显然角度不喜欢它以数字开头。将 = 更改为 @ 修复了它
猜你喜欢
  • 2019-02-09
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
相关资源
最近更新 更多