2017-06-19 2 views
0

Ich bin ziemlich neu zu ionischen und Arbeiten an einer App, wo Sie eine Reihe von Kategorien laden, gefolgt von einer Liste von Elementen in der Kategorie und wenn Sie auf das Element in der Kategorie ein Dokumenturl lädt mit dem Inhalt, der im Grunde ein ist Bild. Derzeit lädt alles gut, aber ich möchte den Inhalt in dem Moment, in dem meine Kategorie sichtbar ist, vorab laden. Selbst wenn ich offline gehe, sollte ich in der Lage sein, auf einen der Einträge in der Kategorieliste zu klicken und das entsprechende Dokument zu laden. Ich schaute online, aber ich konnte nichts außer lokalem Speicher finden, der Daten speichert, nachdem Sie es und nicht vorher besucht haben. Gibt es eine Möglichkeit, Inhalte vorab zu laden oder vorzucachen?Wie kann ich den URL-Inhalt in ionic 1/angular 1 vorcachen?

Hier ist mein Code für Controller:

angular.module('starter.controllers', ["utility.services"]) 
    .directive("bindCompiledHtml", ["$compile", "zoomPerOrientation", function($compile, zoomPerOrientation) { 
    return { 
     template: '<div></div>', 
     scope: { 
     rawHtml: '=bindCompiledHtml' 
     }, 
     link: function(scope, elem, attrs) { 
     scope.$watch('rawHtml', function(value) { 
      if (!value) return; 
      var newElem = $compile(value)(scope.$parent); 
      elem.contents().remove(); 
      zoomPerOrientation.zoomTo('docScroll'); 
      elem.append(newElem); 
      elem.bind("click", function(e) { 
      e.stopPropagation(); 
      e.preventDefault(); 
      if (e.target.tagName === 'A') { 
       window.open(encodeURI(e.target.href), '_system', "presentationstyle=fullscreen,closebuttoncaption=close,location=no,transitionstyle=fliphorizontal"); 
       return false; 
      } else if (e.target.parentNode.tagName === 'A') { 
       window.open(encodeURI(e.target.parentNode.href), '_system', "presentationstyle=fullscreen,closebuttoncaption=close,location=no,transitionstyle=fliphorizontal"); 
       return false; 
      } 
      }); 
     }); 
     } 
    }; 
    }]) 
    .directive('setHeight', function($window) { 
    return { 
     link: function(scope, element, attrs) { 
     element.css('height', $window.innerHeight + 30); 
     } 
    } 
    }) 
    .controller("MenuCtrl", ["$scope", "MenuService", "$stateParams", "$state", "ConfigUrls", function($scope, MenuService, $stateParams, $state, ConfigUrls) { 
    // debugger; 
    console.log("MenuCtrl"); 

    $scope.menuData = []; 
    $scope.noMenuDataMsg = "Loading...."; 
    $scope.LoadMenu = function(forceLoad) { 
     console.log("MenuCtrl - LoadMenu"); 

     // console.log(MenuService.getClinicalAreas(forceLoad)); 
     MenuService.getClinicalAreas(forceLoad).then(function(data) { 
     $scope.menuData = data; 
     }, function(err) { 
     console.log(err); 
     if (err.error === "timeout") { 
      $scope.noMenuDataMsg = "Error: Unable to retrieve data due to network error! Please try again when you are in network." 
     } else { 
      $scope.noMenuDataMsg = "Error: Retieving data! Please contact system administrator." 
     } 
     $scope.menuData = []; 
     }).finally(function() { 
     $scope.$broadcast('scroll.refreshComplete'); 
     }); 
    } 
    $scope.deviceModel = window.localStorage.getItem("deviceModel"); 
    // console.log(MenuService); 
    // console.log($scope.menuData); 
    $scope.title = $stateParams.topTitle; 
    var metaTag = $stateParams.metaTag; 
    //console.log(ConfigUrls[metaTag+"Published"]); 
    if (metaTag !== "") { 
     window.localStorage.setItem('publishedUrl', ConfigUrls[metaTag + "Published"]); 
     window.localStorage.setItem('docUrl', ConfigUrls[metaTag + "DocUrl"]); 
     window.localStorage.setItem('cacheKeyPrefix', metaTag); 

     $scope.LoadMenu(false); 
    } else { 
     $scope.noMenuDataMsg = "Under Construction!"; 
    } 

    //console.log("metaTag",metaTag); 
    //if ($stateParams.topTitle === "Transplant") { 
    // $scope.LoadMenu(false); 
    //} 
    //else { 
    // $scope.noMenuDataMsg = "Under Construction!"; 
    //} 
    $scope.showHomeItem = function(clinicalArea) { 
     console.log("MenuCtrl - showHomeItem"); 

     $state.go('contr.home', { 
     cA: clinicalArea 
     }); 
    } 
    $scope.goHome = function() { 
     console.log("MenuCtrl - goHome"); 

     $state.go('contr.topmenu'); 
    } 
    }]) 
    .controller("HomeCtrl", ["$scope", "HomeService", "$stateParams", "$state", function($scope, HomeService, $stateParams, $state) { 


    console.log("HomeCtrl"); 

    $scope.organs = []; 
    $scope.title = $stateParams.cA; 
    $scope.LoadHome = function(forceLoad) { 
     console.log("HomeCtrl - LoadHome"); 

     HomeService.getOrgans($stateParams.cA, forceLoad).then(function(data) { 
     $scope.organs = data; 
     }, function(err) { 
     $scope.organs = []; 
     }).finally(function() { 
     $scope.$broadcast('scroll.refreshComplete'); 
     }); 
    } 
    $scope.showLevel2Item = function(title, clinicalArea) { 
     console.log("HomeCtrl - showLevel2Item"); 

     $state.go('contr.level2', { 
     title: title, 
     cA: clinicalArea 
     }); 
     //:title/:cA 
    } 

    $scope.goHome = function() { 
     console.log("HomeCtrl - goHome"); 

     $state.go('contr.topmenu'); 
    } 

    $scope.LoadHome(false); 

    }]) 
    .controller('Level2Ctrl', ["$scope", "OrganService", "$stateParams", "$state", function($scope, OrganService, $stateParams, $state) { 
    $scope.title = "Level2 "; 

    console.log("Level2Ctrl"); 

    $scope.parentOrgan = {}; 
    $scope.viewTitle = $stateParams.title; 

    OrganService.getSingleOrganDetail($stateParams.cA, $stateParams.title).then(function(data) { 
     $scope.parentOrgan = data[0]; 
     $scope.parentOrgan.clinicalAreaDisp = "Transplant"; 
    }, function(err) { 
     $scope.parentOrgan = {}; 
    }); 

    console.log($scope.parentOrgan); 

    $scope.subGroup = []; 

    $scope.LoadSubGroups = function(forceLoad) { 
     console.log("Level2Ctrl - LoadSubGroups"); 
     OrganService.getSubGroups($stateParams.title, $stateParams.cA, forceLoad).then(function(data) { 
     $scope.subGroup = data; 
     console.log("$scope.subGroup", $scope.subGroup); 
     }, function(err) { 
     $scope.subGroup = []; 
     }).finally(function() { 
     $scope.$broadcast('scroll.refreshComplete'); 
     }); 
    } 


    //$scope.deviceModel = window.localStorage.getItem("deviceModel"); 
    //$scope.devicePlatform = window.localStorage.getItem("devicePlatform"); 

    $scope.toggleGroup = function(group) { 
     group.show = !group.show; 
    }; 
    $scope.isGroupShown = function(group) { 
     return group.show; 
    }; 
    $scope.showDocumentDtl = function(id, docTitle, sgName, mnGroup, area) { 
     console.log("Level2Ctrl - showDocumentDtl"); 

     $state.go('contr.doc-dtl', { 
     id: id, 
     docTitle: docTitle, 
     sgName: sgName, 
     mnGroup: mnGroup, 
     area: area 
     }); 
     //:title/:cA 
    } 
    $scope.goHome = function() { 
     console.log("Level2Ctrl - goHome"); 
     $state.go('contr.topmenu'); 
    } 
    $scope.LoadSubGroups(); 
    }]) 
    .controller('DocumentCtrl', ["$scope", "DocmentService", "zoomPerOrientation", "$stateParams", "$ionicScrollDelegate", "$state", function($scope, DocmentService, zoomPerOrientation, $stateParams, $ionicScrollDelegate, $state) { 
    $scope.viewData = {}; 
    $scope.snippet = "<p style='margin-top:40%;margin-left:40%;font-weight:bold;font-size:1.6em;' class='item item-stable'>Loading...</p>"; 
    $scope.statusMessage = ""; 
    $scope.title = $stateParams.mnGroup; 

    console.log("DocumentCtrl"); 

    console.log("$stateParams", $stateParams); 
    //, $stateParams.docTitle, $stateParams.sgName, $stateParams.mnGroup, $stateParams.area 
    // console.log("Inside docuemtn controller"); 
    $scope.LoadDocument = function(forceLoad) { 
     console.log("DocumentCtrl - LoadDocument"); 
     DocmentService.getRowDocument($stateParams.id, $stateParams.docTitle, $stateParams.sgName, $stateParams.mnGroup, $stateParams.area, forceLoad).then(
     function(data) { 
      // console.log("successfull", data); 
      $scope.viewData = data; 
      $scope.snippet = $scope.viewData.document; 
     }, 
     function(reason) { 
      // console.log("Error Occured", reason); 
      $scope.viewData = { 
      "docTitle": "Error Occured!" 
      }; 
      if (reason.error === "timeout") { 
      $scope.snippet = "<div style='margin-top:40%;margin-left:15%;font-weight:bold;font-size:1.6em;width:600px !important;padding:16px !important;line-height:120%;' class='item item-stable item-text-wrap item-complex'>Error: Unable to the load the document at this time. Please make sure you are in the network or you have already fetched the document while you were in the network!</div>"; 
      } 
      // $scope.statusMessage = err; 
     }).finally(function() { 
     console.log("finally", data); 
     $scope.$broadcast('scroll.refreshComplete'); 
     }); 
    } 

    //below code would be refactored in near future. 
    //It is not a good practice adding window event listener in the controller 
    window.addEventListener('orientationchange', function() { 
     try { 
     if ($ionicScrollDelegate.$getByHandle('docScroll')._instances.length > 2) { 
      zoomPerOrientation.zoomTo('docScroll'); 
     } 
     } catch (exception) { 
     console.log(exception); 
     } 

    }); 
    $scope.goHome = function() { 
     console.log("DocumentCtrl - goHome"); 
     $state.go('contr.topmenu'); 
    } 

    $scope.LoadDocument(true); 
    }]) 
    .controller('TopMenuCtrl', ["$scope", "TopMenuService", "$state", "$ionicHistory", 
    function($scope, TopMenuService, $state, $ionicHistory) { 
     $ionicHistory.clearHistory(); 
     $scope.title = "Rules"; 
     $scope.menuItems = []; 
     $scope.menuItemsLandscape = []; 
     $scope.flatMenuItems = []; 
     $scope.tileView = true; 
     $scope.listView = false; 
     $scope.portraitMode = true; 

     console.log("TopMenuCtrl"); 

     TopMenuService.getMenuItems().then(function(data) { 
      $scope.menuItems = data.colData; 
      $scope.flatMenuItems = data.flatData; 
      $scope.menuItemsLandscape = data.threeColData; 
      console.log($scope.menuItems); 
     }, 
     function() { 
      $scope.menuItems = []; 
     }); 

     $scope.showMenuItem = function(title, metaTag) { 
     console.log("TopMenuCtrl - showMenuItem"); 

     //$state.go('tab.menu', { topTitle: title }); 
     $state.go('contr.menu', { 
      topTitle: title, 
      metaTag: metaTag 
     }); 
     } 

     $scope.itemChanged = function() { 
     console.log("TopMenuCtrl - itemChanged"); 

     console.log($scope.tileView); 
     if ($scope.tileView) { 
      $scope.listView = true; 
      $scope.tileView = false; 

     } else { 
      $scope.listView = false; 
      $scope.tileView = true; 
     } 
     } 
     // console.log(window.orientation); 
     function onChangeOrientation() { 
     console.log("TopMenuCtrl - onChangeOrientation"); 

     try { 
      //landscape mode 
      // console.log("Orientation Changed"); 

      if (window.orientation === 90 || window.orientation == -90) { 
      $scope.portraitMode = false; 
      } 
      //portrait 
      else { 
      $scope.portraitMode = true; 
      } 
     } catch (exception) { 
      console.log(exception); 
     } 
     } 

     onChangeOrientation(); 
     window.addEventListener('orientationchange', function() { 
     try { 
      //landscape mode 
      // console.log("Orientation Changed"); 

      if (window.orientation === 90 || window.orientation == -90) { 
      $scope.$apply(function() { 
       $scope.portraitMode = false; 
      }); 
      } 
      //portrait 
      else { 
      $scope.$apply(function() { 
       $scope.portraitMode = true; 
      }); 
      } 
     } catch (exception) { 
      console.log(exception); 
     } 

     }); 

    } 
    ]) 
    .controller('LoginController', ["$scope", "$location", "$ionicHistory", '$timeout', '$ionicLoading', '$state', 
    function($scope, $location, $ionicHistory, $timeout, $ionicLoading, $state) { 

     $scope.username = "Guest"; 
     $scope.password = "Abcd123"; 
     // $ionicNavBarDelegate.showBar(false); 
     $scope.login = function(password) { 
     console.log("LoginController - login"); 

     if (password) { 
      $ionicLoading.show({ 
      content: 'Loading', 
      animation: 'fade-in', 
      showBackdrop: true, 
      template: '<p class="item-icon-left bar-header"><ion-spinner icon="lines"/></p>', 
      maxWidth: 200, 
      showDelay: 0 
      }); 
      window.localStorage.setItem("Pswd", password); 
      $ionicHistory.nextViewOptions({ 
      disableAnimate: true, 
      disableBack: true 
      }); 

      $timeout(function() { 
      $ionicLoading.hide(); 
      //$location.path("/tab/topmenu"); 
      $state.go('contr.topmenu'); 
      }, 1000); 
     } 
     } 
    } 
    ]) 
    .controller('AccountCtrl', function($scope) { 
    $scope.settings = { 
     enableFriends: true 
    }; 
    }); 

Bitte lassen Sie mich wissen, wenn Sie andere info.Also benötigen, derzeit ich lokal lokale Cache zu Cache Kategorien unterstützen, aber nicht im Voraus zwischengespeichert. Gibt es eine Möglichkeit, diese Dokumente vorher abzurufen? Bitte überprüfen Sie meine loaddocuments Abschnitt, der sich mit dem Laden von Dokumenten URLs befasst, sobald Sie auf den bestimmten Artikel klicken.

+0

Bitte verwenden Sie nicht die eckigen Tag in angularjs verwandten Fragen –

+0

Haben Sie versucht, mit lokalen Speicher oder lokale DB? –

+0

Ich habe, und es funktioniert für einzelne Elemente innerhalb der Kategorien. Ich bin auf der Suche nach Prefetch der URL und Caching-Inhalte direkt beim Start der App, so dass Benutzer Daten auch im Offline-Modus anzeigen können. Gibt es eine Möglichkeit, das zu tun? –

Antwort

0

Bitte beachten Sie das ich bereits alles mit Programmieransatz erklärt habe.

StackOverflow Solution Link

können Sie diesen Ansatz verwenden, erklärt, und das Hinzufügen von für andere, die für Antwort auf diese Frage suchen.

Verwandte Themen