我有一个与Angularjs一起使用的表单,该表单通过一个按钮收集包括GPS位置在内的用户数据。 (该应用为混合应用)
我尝试更改代码中的某些内容,但无法正常工作。而且Google无法提供任何解决方案。
代码如下:
<div class="content-field">
<div class="gps-field" ng-class="$ctrl.field.value? 'has-data' : ''" ng-click="getPosition()" type="button">
<i class="icon-ami-gps-loc" ng-style="{color: $ctrl.fieldstyle.link_color}"></i>
<label>{{ 'gpsInformation' | translate }}</label>
</div>
<i class="icon-ami-erase-fields-q clear-field" ng-click="clearData()"></i>
<div class="gps-data" ng-class="$ctrl.field.value? 'active' : ''">{{ (($ctrl.field && $ctrl.field.value)? 'gpsPositionString': 'gpsPlaceholder') | translate:$ctrl.field.value }}</div>
</div>
这是课程:
class GeolocationField {
constructor (GeolocationService, LoaderFactory, ErrFactory, $translate, $scope, $rootScope) {
Object.defineProperties(this,{
'GeolocationService': { value: GeolocationService },
'LoaderFactory': { value: LoaderFactory },
'ErrFactory': { value: ErrFactory },
'$rootScope': { value: $rootScope }
});
$scope.getPosition = this.getPosition.bind(this);
$scope.clearData = this.clearData.bind(this);
}
getPosition () {
if (this.$rootScope.readOnly) return;
this.LoaderFactory.show();
this.LoaderFactory.initShowCancelButtonText();
Promise.race([
this.GeolocationService.getCurrentPosition(),
( new Promise((res,rej) => this.LoaderFactory.once('updated:Interruption',() => {
if (this.LoaderFactory.getInterruption()) rej(new this.ErrFactory.QuietError())
})) )
])
.then((position) => {
this.field.value = position;
})
.catch((err) => {
if (err instanceof this.ErrFactory.DeniedPermissionForGeolocation.IOS) {
return err.confirm()
.then((ans) => {
if (ans != 2) return;
else return cordova.plugins.settings.open();
})
}
else if (err instanceof this.ErrFactory) return err.notify();
else console.error(err);
})
.then(() => { this.LoaderFactory.hide() });
};
clearData () {
if (this.$rootScope.readOnly) return;
this.field.value = '';
};
}
GeolocationField.reqest_str = 'gpsPlaceholder';
GeolocationField.anwer_str = 'gpsPositionString';
app.component('gpsField', {
templateUrl: './scripts/components/geolocation-field/template.html',
controller: GeolocationField,
bindings : {
item: '<',
field: '<',
fieldstyle: '<'
},
});
根据要求,在Chrome,IOS设备和一些android设备(RedMI,Tecno ...)上,最长可以运行5秒。
问题出在Huawei P Smart,Samsung S9和Samsung Tab 6上,它在5分钟后一直显示加载程序。
关于这些设备,我会缺少一些规范吗?还请注意,我本机实现了此功能...不使用任何插件。