Angular解决承诺并更新现有范围

时间:2016-07-06 06:11:22

标签: angularjs angularjs-directive angular-promise

我想了解Angular的承诺和范围。实际上我实施了下面的指令。我想要做的是从服务器接收图像并在本地存储,以便下次缓存它们。此外,我想在图像加载完成之前显示一个微调器,并在完成后显示它。 在完成所有这些承诺后,如何将变量newUrl更新为指令? 你有什么想法吗?

我的HTML代码是:

 <div style="text-align: center;"
     cache-src         
     url="https://upload.wikimedia.org/wikipedia/commons/c/c0/Aix_galericulata_(Male),_Richmond_Park,_UK_-_May_2013.jpg">
 </div>

我的指示是:<​​/ p>

.directive('cacheSrc', [function () {
return {
  restrict: 'A',
  scope: {
    url: '@'
  },
  controller: 'cacheSrcCtrl',
  template: '<img width="100%" ng-if="newUrl!=null" src="{{newUrl}}"><ion-spinner ng-if="newUrl==null" icon="spiral"></ion-spinner>',
};
  }])

指令控制器具有以下功能:

document.addEventListener('deviceready', function () {
  $scope.updateUrl = function (newUrl) {
    $scope.newUrl = newUrl;
  };

  var tmp = $scope.url;
  $cordovaSQLite.execute(db, 'SELECT * FROM images where url = (?)', [tmp])
    .then(function (result) {
      if (result.rows.length > 0) {
        $scope.exists = true;
        for (var i = 0; i < res.rows.length; i++) {
          var image = {
            id: res.rows.item(i).id,
            url: res.rows.item(i).url,
            uri: res.rows.item(i).uri
          };
          $scope.updateUrl(image.uri);
        }
      } else {
        $scope.exists = false;
        var fileTransfer = new FileTransfer();
        var uri = encodeURI(tmp);
        var uriSave = '';
        var fileURL = cordova.file.dataDirectory + uri;//'kaloudiaImages';// + getUUID();// + "DCIM/myFile";
        fileTransfer.download(
          uri, fileURL, function (entry) {
            uriSave = entry.toURL();
            KaloudiaDB.add(tmp, fileURL);
            $scope.newUrl = fileURL;
            $scope.updateUrl(fileURL);
          },
          function (error) {
            console.log("download error code" + error.code);
          },
          false, {
            headers: {
              // "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
            }
          }
        ).then(function (data) {
          $scope.newUrl = fileURL;
        });
      }
    }, function (error) {
      $scope.statusMessage = "Error on saving: " + error.message;
    })
    .then(function (data) {
      $scope.$apply(function () {
        $scope.newUrl = fileURL;
      });
    });
});

0 个答案:

没有答案