Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在angular js中使用电池管理器_Javascript_Angularjs_Navigator - Fatal编程技术网

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()