Javascript 具有现代化值的角度表达式?

Javascript 具有现代化值的角度表达式?,javascript,angularjs,modernizr,Javascript,Angularjs,Modernizr,如果新的输入类型不支持HTML5本机浏览器,我想显示不同的控件 我希望做这样的事情: <p ng-show="{{Modernizr.inputtypes.datetime-local}}">Modernizr says datetime-local is supported!</p> modernizer表示支持datetime local 但是,Modernizer似乎不适用于角度表达式 是将我感兴趣的所有Modernizer值在启动时放在rootscope上,

如果新的输入类型不支持HTML5本机浏览器,我想显示不同的控件

我希望做这样的事情:

 <p ng-show="{{Modernizr.inputtypes.datetime-local}}">Modernizr says datetime-local is supported!</p>

modernizer表示支持datetime local

但是,Modernizer似乎不适用于角度表达式


是将我感兴趣的所有Modernizer值在启动时放在rootscope上,以便在表达式中使用,还是有更好的方法?

您可以将所有Modernizer值放在rootscope上,这样就可以了(请注意,
ng show
中的
modernizer.inputtypes.datetimeLocal
应该是
modernizer.inputtypes.datetimeLocal

但我的首选是使用
常量()
使其可注入,并仅在作用域上公开所需的属性,这样视图就不会耦合到Modernizer

app.constant("Modernizr", Modernizr);

app.controller("controller", function ($scope, Modernizr) {
    $scope.browser = {
        supportsDateimeLocalInput: Modernizr.inputtypes.datetimeLocal,
        supportsEmailInput: Modernizr.inputtypes.email
    };    
});
在我看来

<p ng-show="browser.supportsDatetimeLocalInput">
    Modernizr says datetime-local is supported!
</p>

Modernizer表示支持datetime local!


首先确保您的项目中包含Modernizr。我创建了一个简单的提供程序,允许Modernizr注入到我们的指令中,而不是全局访问。我们使用Modernizr来检测我们以后是否在指令中使用触摸设备。

angular.module('fast-click')。provider('modernizer',function(){
"严格使用",;
此。$get=函数(){
回归现代化| |{};
};
});
接下来,让我们定义快速单击指令

angular.module('fast-click')。指令('fastClick',函数($parse,modernizer){
"严格使用",;
返回{
限制:“A”,
链接:函数(范围、元素、属性){
}
};
}); 
您会注意到,我们在快速单击指令中注入了两个依赖项。第一个是
$parse
,它转换角度 将传递给指令的表达式传递到函数中-此 代码段取自随Angular提供的
ng click
指令, 我们将其包装在自己的功能中,以保持干燥

clickFunction=函数(事件){
//如果某个原因导致此处理程序
//取消让我们阻止执行
如果(!取消){
作用域:$apply(函数(){
fn(作用域,{$event:event});
});
}
};

在全球范围内访问它是否有缺点?如何在Angular 4应用程序中使用Modernizer?
<p ng-show="browser.supportsDatetimeLocalInput">
    Modernizr says datetime-local is supported!
</p>