在angular中对指令的模板使用过滤器
Using Filters on the `template` of a `directive` in angular
这个问题是关于在指令的模板中使用绑定和过滤器的组合。只要通读顶部,它就可以理解已经完成了什么,并且已经在工作。
我正在编写一个允许用户上传文件的应用程序,文件必须是特定的MIME类型。
指令在很多地方使用,MIME类型需要在这些地方改变。我需要动态地构造directive
的template
,以适应指令的每个实现。
我在directive
的template
中使用绑定,使其适应来自HTML的请求mime-type
:
app.directive("fileUpload", function () {
return {
restrict: "E",
replace: true,
scope: {
mimeType: '@'
},
template: '<input type="file" id="files" name="files[]" accept="{{mimeType}}" multiple />',
link: function (scope) {
}
};
});
正如我所说的,我在这个指令的HTML实现中声明我的mime-type
:
<body ng-app="app" ng-controller="appCtrl">
<file-upload mime-type="text/html"></file-upload>
</body>
这工作得很好,但是我害怕使用这个指令而没有声明 mime-type in my HTML
。我试着做一个filter which would remove the accept attribute from the template if the mime-type was undefined
:
app.filter('accept', function (){
return function(mimeType){
if(mimeType)
{
if(mimeType.length)
return 'accept="' + mimeType + '"';
else
return "";
}
else
return "";};
});
然后我重写了我的template
如下:
template: '<input type="file" id="files" name="files[]" {{mimeType | accept}} multiple />',
你可以猜到,这不起作用,但为什么呢?
如果mime-type
是undefined
或""
,过滤器应该返回""
,否则,它应该返回accept="(mimeType)"
。
好像没有识别accept
过滤器,为什么?如何使指令识别我的过滤器?
这是小提琴!
它工作正常,只是使用不当。
你在HTML标签内使用表达式绑定,表达式绑定只在HTML标签内的属性内或HTML标签外工作。
的例子:
<tag attr="{{ binding }}"></tag> <!-- Good -->
<tag>{{ binding }}</tag> <!-- Good -->
<tag {{ binding }}></tag> <!-- Bad -->
使用模板:
<input type="file" id="files" name="files[]" accept="{{mimeType | accept}}" multiple />
现在,如果你改变你的过滤器返回从return 'accept="' + mimeType + '"';
到return mimeType;
,那么你应该得到所需的结果。
小提琴
- Angular-表的多列过滤器
- 使用按钮的Angular UI网格过滤器
- 如何在angular.js中动态应用自定义过滤器
- 如何在Angular中清除选择元素中的过滤器
- 角度限制过滤器's的第二参数“s”;“开始”;在Angular 1.3中似乎不起作用
- Angular js过滤器在某些移动设备上不起作用
- 我们如何自定义内置的 Angular “货币”过滤器
- 在Angular.JS-ng隐藏vs过滤器中将对象分隔为两组
- Angular实现多搜索过滤器
- 将IIFE的原始值存储在Angular中的监视功能(重置过滤器)中
- 如何在Angular js中返回html代码作为过滤器的输出
- 如何在angular中使用UpperCase过滤器
- Angular自定义过滤器在处理某些匹配时注销,但会过滤掉所有结果
- Angular js自定义过滤器未定义
- 自定义Angular.js过滤器在IE8中不返回任何内容,在Chrome/FF中运行良好
- 如何使用angular js过滤器格式化数组中的值
- 将过滤器添加到Angular中的选择框选项列表中
- JavaScript中的RegExp过滤器(Angular.js)
- 数组中的Angular js过滤器数组
- Angular.js:秒到HH:mm:ss过滤器