javascript - 在 Angular js 中使用电池管理器

标签 javascript angularjs navigator

我试图将电池管理器对象挂接到 Angular Controller ,但是当 navigator.getBattery() 的 promise 完成时, Controller 对象似乎没有更新。这是我想到的

(function(){
var app=angular.module('appBattery',[]);
app.controller('batteryController',['$window',function($window){
this.bat={};
this.level=this.bat.level;
$window.navigator.getBattery().then(function(battery){
    setBattery(battery);
});
function setBattery(battery){
    this.bat=battery;
    console.log(this.bat);
}
console.log(this.bat);
}]);
})();

用这个html

<div ng-app='appBattery'>
<div id="battery-status-bar" ng-controller='batteryController as battery'>
    <div class="battery">
        <div class="power">
        {{battery}}
            <div class="level"></div>
        </div>
    </div>
    <div class="percentage">{{battery.bat.level}}</div>
    <div class="time">{{battery.bat.chargeTime +':'+battery.bat.dischargeTime}}</div>
</div>
</div>

也可以在jsfiddle上找到here

最佳答案

您可以将 Controller 保留为语法。查看我更新的 fiddle https://jsfiddle.net/fnnruzjw/1/ 。目前有几个问题:

您需要使用 $scope.$apply。

$window.navigator.getBattery().then(function(battery){
	$scope.$apply(function() {
    setBattery(battery);
  });
});

你的 this 指的是错误的 this (我将其更改为 vm,这是一种流行的约定)。

重新分配电池对象时,您丢失了对电池对象的引用。我使用 angular.copy 来保留引用。

function setBattery(battery){
  angular.copy(battery, vm.bat);
	console.log(vm.bat);
}

关于javascript - 在 Angular js 中使用电池管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34095475/

相关文章:

javascript - angularjs中的 Controller 功能?

javascript - 使用一个静态文件(动态)连接/缩小一组文件

javascript - 指令没有正确获取属性

javascript - AngularJS - orderBy 距离函数

javascript - 无法以 Angular 访问 Controller 内部的变量

android - iconitemrenderer 可点击对象?

android - 是否可以使用 navigator.pop 刷新或重新加载页面...比如第 1(nav.push=>2)页面到第 2 页,然后从第 2(nav.pop,值)返回到第 1 页?

android - navigator.geolocation.getCurrentLocation 在 phonegap android 中的奇怪行为

javascript - 如何获取URL中 '#'之后的字符串

javascript - StatusBarItem 的注册命令