AngularJS進階(三十四)Angular數據更新不及時問題探討

      網友投稿 753 2025-04-01

      Angular數據更新不及時問題探討

      前言

      在修復控制角標正確變化過程中,發覺前端代碼組織層次出現了嚴重問題。傳遞和共享數據時自己使用的是rootScope,為此造成了全局變量空間的污染。根據《AngularJs深度剖析與最佳實踐》,如果兩個控制器的協作存在大量的數據共享和交互可以利用Factory等服務的“單例”特性為它們注入一個共享對象來傳遞數據。而自己在使用rootScope時,出現了變量不一致的情況。如下圖所示:

      按照應用邏輯,“我的”角標變化應與“找藥幫查詢”角標變化一致。通過運行表明,“找藥幫查詢”角標存在變化異常的狀況。通過閱讀代碼與調試,發現自己的業務邏輯存在問題。業務代碼如下:

      /*

      * 更新我的徽標

      */

      $rootScope.updateMyBadge = function() {

      if (localStorage.logined != '1') {

      $rootScope.mybadge = '';

      }else{

      if ($rootScope.medNoticeBadge_Sunny && $rootScope.medNoticeBadge_Sunny != 0 ) {

      $rootScope.mybadge = $rootScope.medNoticeBadge_Sunny;

      } else {

      $rootScope.mybadge = '';

      }

      }

      }

      setTimeout(function(){

      $rootScope.updateMyBadge();

      },2*1000); // 2秒后執行

      其中$rootScope.mybadge為相應角標變量。其值來自于全局變量$rootScope.medNoticeBadge_Sunny,而這個變量又來自于下面的方法體:

      /*

      * 已響應查詢找藥小紅點

      */

      $rootScope.updateMedNoticeBadge = function(num) {

      console.log(num);

      $rootScope.medNoticeBadge = 0;

      if (localStorage.getItem('medNoticeBadge')) {

      $rootScope.medNoticeBadge = Number(localStorage.getItem('medNoticeBadge'));

      $rootScope.medNoticeBadge += num;

      } else {

      $rootScope.medNoticeBadge += num;

      }

      localStorage.setItem('medNoticeBadge', $rootScope.medNoticeBadge);

      $rootScope.medNoticeBadge_Sunny = localStorage.getItem('medNoticeBadge');

      $rootScope.medNoticeBadge = localStorage.getItem('medNoticeBadge');

      if (!$rootScope.userinfo.logined) {

      localStorage.removeItem('medNoticeBadge');

      $rootScope.medNoticeBadge = 0;

      }

      }

      AngularJS進階(三十四)Angular數據更新不及時問題探討

      以上方法體又是通過如下語句調用的:

      /*

      *初次查詢找藥狀況查詢信息(只調用一次)

      */

      $rootScope.getmedNoticeBadge = function() {

      if (localStorage.logined == '1') {

      var data = {

      'stat': "1"

      };

      appCallServer($http, "9015", data, function(data) {

      localStorage.setItem('medNoticeBadge', 0);

      $rootScope.updateMedNoticeBadge(data.cnt);

      }, function(data) {

      console.log("9015_找藥狀況:" + data.errtext);

      });

      }

      };

      $rootScope.getmedNoticeBadge();

      執行時出現了變量更新不及時的錯誤現象。導致角標顯示異常。

      通過閱讀以上代碼,發現變量均是通過rootScope傳遞的。為此自己通過延時執行角標變化的方法體。但這并不是一個良好的的項目組織層次。自己應該將控制角標變化的方法體封裝成服務的形式,利用其單例特性解決數據不一致的情況。

      自己嘗試利用Factory單例特性創建服務,但是結果錯誤。代碼如下:

      myCtrl.factory('mybadgeService',function($http){

      var mybadgeFactory = {};

      mybadgeFactory.runMybadgeRequest = function(){

      if (localStorage.logined == '1') {

      var data = {

      'stat': "1"

      };

      appCallServer($http, "9015", data, function(data) {

      console.log("9015_找藥狀況-查詢成功:" + JSON.stringify(data));

      return data.cnt;

      }, function(data) {

      console.log("9015_找藥狀況:" + data.errtext);

      return 0;

      });

      }

      }

      return mybadgeFactory;

      });

      參考文獻:

      1.http://www.xker.com/page/e2015/06/199141.html

      美文美圖

      Angular AngularJS

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:優化工作流,提高工作效率
      下一篇:精確定位圖片在Word文檔中的位置的操作方法(Word文檔圖片位置)
      相關文章
      亚洲精品美女视频| 久久91亚洲精品中文字幕| 亚洲成人午夜电影| 久久久无码精品亚洲日韩蜜臀浪潮 | 日韩亚洲人成在线综合| 亚洲激情视频图片| 精品久久久久久亚洲精品| 亚洲人成在线免费观看| 亚洲人6666成人观看| 亚洲av日韩av无码av| 亚洲an日韩专区在线| 国产91在线|亚洲| 亚洲色欲色欲www在线播放| 国产精品亚洲综合五月天| 最新亚洲卡一卡二卡三新区| 亚洲最大天堂无码精品区| 亚洲熟女综合色一区二区三区| 亚洲最大无码中文字幕| 国产成人人综合亚洲欧美丁香花 | 日韩亚洲人成在线综合| 四虎亚洲国产成人久久精品| 国产亚洲视频在线播放大全| 亚洲色婷婷综合开心网| 国产亚洲精品拍拍拍拍拍| 亚洲熟妇av一区二区三区| 亚洲成AV人片在线观看WWW| 91亚洲国产在人线播放午夜| 亚洲精品人成电影网| 自拍日韩亚洲一区在线| 亚洲精品久久无码av片俺去也 | 亚洲日本在线观看| 亚洲成a人片毛片在线| 亚洲情A成黄在线观看动漫软件| 亚洲五月综合缴情婷婷| 亚洲精品V天堂中文字幕| 亚洲国产人成精品| 日韩va亚洲va欧洲va国产| 666精品国产精品亚洲| 亚洲狠狠成人综合网| 国产亚洲福利精品一区二区| 亚洲综合伊人久久综合|