修改Angular $ scope后DOM没有刷新

石匠

我有一个利用Angular的HTML5离线Web应用程序。我想建立两个按钮。一个应该检查更新,另一个应该应用更新。

  • 如果更新已准备就绪,则“检查更新”按钮应该不可见,而“应用更新”按钮应该是可见的。
  • 如果没有准备好更新,则“检查更新”按钮应该可见,但是“应用更新”按钮则不可见。

我通过导航控制器执行此逻辑。

TermaPocketBookModule.controller("NavigationController", ['$scope', '$rootScope', function ($scope, $rootScope) {

    //check to see if an update is available when the application starts
    if (window.applicationCache.status === window.applicationCache.UPDATEREADY) {
        $scope.ApplicationUpdateReady = true;
    }
    else {
        $scope.ApplicationUpdateReady = false;
    }

    //add handler to handle the DOM's updateready event.
    window.applicationCache.addEventListener('updateready', function () {
        console.log("Update ready.");
        $scope.ApplicationUpdateReady = true;
    });

    //button handler to apply an update
    $scope.ApplyUpdate = function () {
        console.log("Apply update clicked.");
        window.applicationCache.swapCache();
        location.reload();
    }

    //button handler to check for an update
    $scope.CheckForUpdate = function () {
        console.log("Checking for update.");
        window.applicationCache.update();
    }
}]);

在我的HTML中:

<ul class="nav navbar-nav" ng-controller="NavigationController">
    <li ng-if="ApplicationUpdateReady"><a ng-click="ApplyUpdate()">Update Application</a></li>
    <li ng-if="ApplicationUpdateReady != true"><a ng-click="CheckForUpdate()">Check for Updates</a></li>
</ul>

这实际上是实际发生的情况:

  1. 我更新了服务器上的应用程序缓存清单。
  2. 我按客户端中的“检查更新”按钮。在JS控制台中,我看到它下拉了更新的资源,并且看到了日志消息“更新准备就绪”。
  3. 此时,我希望我的UI更新并显示“应用更新”按钮,但不会。“检查更新”按钮仍然可见,因此我单击了它。
  4. 出现更新应用程序按钮。我单击该按钮,它将正确重新加载该站点。

因此,在上述第3步中,我期望由于更改而出现“更新应用程序”按钮$scope.ApplicationUpdateReady为什么这不起作用,我必须再次按下它才能显示“更新应用程序”按钮?

lucky7id

这里有两件事:

  1. JavaScript基元的性质以及Angular处理它们的方式。
  2. 需要$ scope。$应用于Angular摘要之外的事件。

见下文:

$scope.model = {};
$scope.model.ApplicationUpdateReady = false;

window.applicationCache.addEventListener('updateready', function () {
    console.log("Update ready.");
    $scope.model.ApplicationUpdateReady = true;
    $scope.$apply();
});

<ul class="nav navbar-nav" ng-controller="NavigationController">
    <li ng-if="model.ApplicationUpdateReady"><a ng-click="ApplyUpdate()">Update Application</a></li>
    <li ng-if="model.ApplicationUpdateReady != true"><a ng-click="CheckForUpdate()">Check for Updates</a></li>
</ul>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Angular 如何修改 DOM?

Angular:列表数据修改后如何刷新视图?

Angular 2更改检测-即使没有任何更改也刷新DOM

在指令中的异步服务的处理程序中进行范围修改后,DOM没有更新

在Greasemonkey中的Angular JS中修改DOM元素

返回修改后的可观察值Angular 6

在 Angular 中路由后,查询参数在 URL 中得到修改

更改$ scope.var后,Angular.js不会刷新转发器,而只会在刷新后刷新

在Angular JS中,有没有办法在不使用scope.watch的情况下监视DOM的更改?

Angular 删除所有已完成的工作没有刷新

为什么变量修改后没有变化?

修改后的函数没有递归无法正常工作

使用ng-change时如何在Angular js中修改dom属性?

当multi.js库修改了<select>时,AJAX请求没有刷新<select>

在Angular2中提交表单后修改对象的变量值

Angular JS:无法将修改后的文本区域返回给JavaScript

检测到修改后的文件后,有没有立即运行的git hook?

如何使用angular2表单获取所有“脏”(已修改)字段?

修改dom后允许contenteditable撤消

Maquette修改后如何更新DOM

从DOM修改/删除节点/元素后还原

jQuery没有修改CSS

为什么我的Angular测试$ scope没有定义方法?

在没有$ scope的情况下在Angular中显示内容

Angular控制器继承变量而没有$ scope

Angular指令修改范围

有没有办法在执行后修改flask db migrate消息?

为什么我没有对具有修改后的ACL的文件的读取权限?

刷新后,UIRefreshControl没有隐藏。的iOS