Javascript 在angular js中使用电池管理器
我试图将电池管理器对象挂接到一个角度控制器上,但是当Javascript 在angular js中使用电池管理器,javascript,angularjs,navigator,Javascript,Angularjs,Navigator,我试图将电池管理器对象挂接到一个角度控制器上,但是当navigator.getBattery()的承诺完成时,控制器对象似乎没有更新。这是我想到的 (function(){ var app=angular.module('appBattery',[]); app.controller('batteryController',['$window',function($window){ this.bat={}; this.level=this.bat.level; $window.navigator
navigator.getBattery()的承诺完成时,控制器对象似乎没有更新。这是我想到的
(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>
{{电池}
{{电池.bat.level}
{{battery.bat.chargeTime+':'+battery.bat.dischargeTime}
也可以在JSFIDLE上找到它将电池
分配给$scope.bat
(也在控制器中注入$scope)。您可能还需要执行$scope.$apply()
。几乎用$scope
替换这个
,您可以将控制器保留为语法。查看我的最新小提琴在。手头有几个问题:
您需要使用$scope.$apply
$window.navigator.getBattery()。然后(函数(电池){
$scope.$apply(函数(){
电池(电池);
});
});代码>将$scope.$appy()放在哪里?为什么它不能用作控制器属性?对于组织,我更喜欢将其用作控制器属性,而不是变量的作用域。在您的视图中,您只能访问$scope
中的属性。您需要使用$scope.$apply()
,因为bat
是在异步函数中设置的,而不是angulars正常摘要周期的一部分。是否有方法将其添加到$scope.$watch而不将其分配给作用域变量?电池管理器不断更新,但即使在我执行$scope之后,作用域似乎也不会监视它。$apply()