【发布时间】:2017-05-18 15:55:03
【问题描述】:
我有一个名为 smDualList 的移动器列表指令。该指令具有以下模板(部分代码):
<div>
<select class="select-list" multiple
ng-model="unassigned"
name="unAssignedList"
data-no-dirty-check
ng-options="unassignedItem.descrip for unassignedItem in unassignedItems | orderBy:'descrip' | filter: filterCriteria"></select>
</div>
这是我的页面标记:
<data-sm:duallist-directive ng-required="false" keep-pristine="true"
unassigned-items-title="'@String.Format(Labels.availableX, Labels.items)'"
unassigned-items="currentBenefit.unassignedItems"
assigned-items-title="'@String.Format(Labels.assignedX, Labels.items)'"
assigned-items="currentBenefit.assignedItems"
sortable="false"
filter-criteria="{'categoryId':selectedCategoryId}"
selected-item="currentBenefit.selectedItem">
</data-sm:duallist-directive>
directive.js 文件的代码如下:
restrict: 'E',
templateUrl: 'app/templates/smDuallist',
require: ['^form'],
scope: {
assignedItems: '=assignedItems',
unassignedItems: '=unassignedItems',
assignedItemsTitle: '=',
unassignedItemsTitle: '=',
filterCriteria: '=',
sortable: '=sortable',
selectedItem: '=?',
keepPristine: '=?'
},
link: function (scope, element, attrs, ctrls) {
scope.form = ctrls[0];
if (!scope.keepPristine)
scope.keepPristine = false;
}
所以,问题是我需要在 filter-criteria 表达式的末尾添加一个 true 参数,所以它会读作
filter-criteria="{'myColumn': myScopeProperty}:true"
不幸的是,当我尝试将它完全像这样放在表单上时,我得到了一个错误。
angular.js:13920 [错误:[$parse:syntax] 语法错误:标记“:”是表达式 [{'categoryId':selectedCategoryId}:true] 的第 34 列中的意外标记,从 [:true ].] http://errors.angularjs.org/1.5.8/$parse/syntax?p0=%3A&p1=is%20an%20unexpec…20token&p2=34&p3=%7B'categoryId'%3AselectedCategoryId%7D%3Atrue&p4=%3Atrue 在http://localhost:9753/SiriuswareControl/Scripts/angular.js:68:12 在 AST.throwError (http://localhost:9753/SiriuswareControl/Scripts/angular.js:14555:11) 在 AST.ast (http://localhost:9753/SiriuswareControl/Scripts/angular.js:14308:12) 在 ASTCompiler.compile (http://localhost:9753/SiriuswareControl/Scripts/angular.js:14771:31) 在 Parser.parse (http://localhost:9753/SiriuswareControl/Scripts/angular.js:15700:29) 在 $parse (http://localhost:9753/SiriuswareControl/Scripts/angular.js:15865:39) 在初始化绑定 (http://localhost:9753/SiriuswareControl/Scripts/angular.js:9988:25) 在 forEach (http://localhost:9753/SiriuswareControl/Scripts/angular.js:329:18) 在 initializeDirectiveBindings (http://localhost:9753/SiriuswareControl/Scripts/angular.js:9947:7) 在 nodeLinkFn (http://localhost:9753/SiriuswareControl/Scripts/angular.js:9242:30)
可能有办法以某种方式在指令 JavaScript 代码中添加该 true 参数吗?
最后一个参数来自以下讨论: Angular filter exactly on object key
我可能可以创建一个过滤器函数,但我如何创建它以使其足够通用以知道要使用哪个属性?因为我的表单中有几个移动器,我不想在控制器中为每个移动器创建一个函数。
【问题讨论】:
-
您收到的错误信息是什么?
-
angular.js:13920 [错误:[$parse:syntax] 语法错误:令牌“:”是表达式 [{'categoryId':selectedCategoryId}:true] 的第 34 列的意外令牌从 [:true] 开始。]
标签: javascript html angularjs angularjs-directive