【问题标题】:Angularjs: bracket missing in attributeAngularjs:属性中缺少括号
【发布时间】:2015-05-07 22:58:41
【问题描述】:

我正在编写 Angularjs 代码,但出现了一个奇怪的错误:

“错误:[$parse:syntax] 语法错误:从 [{asset.sn}}] 开始的表达式 [{{asset.sn}}] 的第 2 列中的标记 '{' 无效键。 http://errors.angularjs.org/1.3.11/$parse/syntax?p0=%7B&p1=invalid%20key&p2=2&p3=%7B%7Basset.sn%7D%7D&p4=%7Basset.sn%7D%7D minErr/http://localhost:8000/app/vendor/angular/angular.js:63:12

这意味着什么以及为什么显示它?

HTML 代码:

<table class="table" ng-table="tableParams" show-filter="false" ng-class="{loadingtable : loading}" ng-show="showResults">
                <tbody>
                    <tr ng-repeat="asset in assets">
                        <td class="col-md-4" data-title="'Serial Number'" header-class="text-left" search-word-marker param="{{asset.sn}}"></td>
                        <td class="col-md-4" data-title="'Asset Name'" accesskey="" header-class="text-left" search-word-marker param="{{asset.asset_name}}"></td>
                        <td class="col-md-2" data-title="'Asset Type'" header-class="text-left">{{asset.asset_type}}</td>
                        <td class="col-md-2" data-title="'Tags'" header-class="text-left">{{asset.tags}}</td>
                        <td class="col-md-1">
                            <div class="btn-group">
                                <span>
                                    <button type="button" class="btn btn-sm btn-primary" ng-click="viewAsset(asset.sn);">{{'VIEW' | translate}}</button>
                                </span>
                            </div>
                        </td>
                    </tr>
                </tbody>
            </table>

指令代码:

Application.Directives.directive('searchWordMarker', ['$log', '$rootScope', function ($log, $rootScope) {
    return {
        restrict: 'A',
        scope: {
            param: '='
        },
        //template: "{{myNewString}}",
        //replace: false,
        link: function (scope, el, attr) {

            var myString = attr.param;

            var searchWord = $rootScope.searchWord;

            var regex = new RegExp(searchWord, "g");
            var myNewString = myString.replace(regex, "<B>" + searchWord + "</B>");


            el[0].innerHTML = myNewString;


        }
    }
}]);

【问题讨论】:

  • search-word-marker param="asset.sn" 你不需要给{{}}
  • 它不起作用:它将“asset.sn”作为普通文本,它作为文本播放:asset.sn。

标签: angularjs angularjs-directive ngtable


【解决方案1】:

您正在尝试对param 中写入的内容进行双向绑定 (param : "="),但这不是对象或变量,而是表达式。要么丢失 {{}},要么将 scope.param 绑定更改为字符串:

scope: {
     param: '@'
},

【讨论】:

  • 谢谢它的工作:)。为什么我无法进行 2 路绑定... {{asset.sn}} 似乎是(临时)变量。?
  • @P.K.当您可以绑定到变量/对象时,2 路绑定起作用。{{}} 是一个表达式,不能绑定到。 {{asset.sn}} 在一天结束时只计算一个字符串。
  • 这就是我一直在寻找的... 3 小时,感谢@​​OmriAharon :)
  • @AlexSzabó 哎呀.. 很高兴它有帮助:)
【解决方案2】:
 <table class="table" ng-table="tableParams" show-filter="false" ng-class="{loadingtable : loading}" ng-show="showResults">
            <tbody>
                <tr ng-repeat="asset in assets">
                    <td class="col-md-4" data-title="'Serial Number'" header-class="text-left" search-word-marker param="asset.sn"></td>
                    <td class="col-md-4" data-title="'Asset Name'" accesskey="" header-class="text-left" search-word-marker param="asset.asset_name"></td>
                    <td class="col-md-2" data-title="'Asset Type'" header-class="text-left">{{asset.asset_type}}</td>
                    <td class="col-md-2" data-title="'Tags'" header-class="text-left">{{asset.tags}}</td>
                    <td class="col-md-1">
                        <div class="btn-group">
                            <span>
                                <button type="button" class="btn btn-sm btn-primary" ng-click="viewAsset(asset.sn);">{{'VIEW' | translate}}</button>
                            </span>
                        </div>
                    </td>
                </tr>
            </tbody>
        </table>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2016-08-16
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多