2017-02-06 31 views
0

我有一個用Cordova/Ionic製作的應用程序。我正在使用AngularJS。我有以下問題。TypeError:無法分配到只讀屬性'完成'#<Object>

TypeError: Cannot assign to read only property 'done' of #<Object> 
at fn.assign (eval at <anonymous> (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:1:0), <anonymous>:4:390) 
at $$writeModelToScope (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38359:5) 
at writeToModelIfNeeded (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38353:14) 
at file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38347:9 
at validationDone (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38275:9) 
at processAsyncValidators (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38258:9) 
at $$runValidators (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38202:5) 
at $$parseAndValidate (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38340:10) 
at $commitViewValue (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38308:10) 
at file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38441:14 

TypeError: Cannot assign to read only property 'criticality' of #<Object> 
at fn.assign (eval at <anonymous> (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:26457:15), <anonymous>:4:482) 
at $$writeModelToScope (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38359:5) 
at writeToModelIfNeeded (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38353:14) 
at file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38347:9 
at validationDone (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38275:9) 
at processAsyncValidators (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38258:9) 
at $$runValidators (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38202:5) 
at $$parseAndValidate (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38340:10) 
at $commitViewValue (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38308:10) 
at $$debounceViewValueCommit (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:38438:12) 

我已經做了一些關於這個問題的研究之後,我意識到,當你在你的JavaScript文件(click here for the documentation explaining this)使用'USE STRICT'這種類型的錯誤出現。問題是我從來沒有做過。我沒有使用'USE STRICT'。現在這裏是更奇怪的東西。這個問題只發生在Android 4.4.2的三星GT-N5110平板電腦上。在安裝了最新更新的三星Galaxy S7上不會發生這種情況。如果我使用命令ionic serve在我的電腦上吃飯,它也不會發生。它按預期完美工作。它只發生在三星平板電腦上。我嘗試了很多東西,但我找不到任何解決方案。它在平板電腦上運行非常重要,因爲這些平板電腦將用於我們的工作。

它發生在多個變量,但我會提供「完成」作爲第一個錯誤消息看到變量的代碼。

,我就ion-checkbox單擊要更改的 '完成'

<div class="card" ng-repeat="item in etapes" ng-click="itemDetails(item.id)"> 
    <div class="item item-text-wrap"> 
    <p><b>{{'components.inspection.etape.card.title' | translate}}</b> {{item.name}}</p> 
    <p><b>{{'components.inspection.etape.card.duration' | translate}}</b> {{item.duration}} minutes</p> 
    <p><b>{{'components.inspection.etape.card.description' | translate}}</b></p> 
    <p ng-bind-html="item.description"></p> 
    <ion-checkbox ng-disabled="completed" class="item item-input" ng-model="item.done" ng-true-value="1" ng-false-value="0" ng-click="$event.stopPropagation()" ng-change="itemDone(item)" style="width: 100%; border: 0">{{'components.inspection.etape.card.completed' | translate}}</ion-checkbox> 
    </div> 
</div> 

的JS文件(該方法是$ scope.itemDone)值

angular.module('app.controllers') 
.controller('etapeController', ['$state', '$stateParams', '$scope', '$translate', 'Inspection', 'InspectionItem', 'ItemPhoto', '$ionicHistory', 'Camera', '$ionicPopup', '$q', 'InspectionTree', 'InspectionEtape', 'Loading', 'ExportInspection', 'EtapeComment', 'CommentPhoto', 
    function ($state, $stateParams, $scope, $translate, Inspection, InspectionItem, ItemPhoto, $ionicHistory, Camera, $ionicPopup, $q, InspectionTree, InspectionEtape, Loading, ExportInspection, EtapeComment, CommentPhoto) { 
     var inspectionId = $stateParams.inspectionId; 
     var itemId = $stateParams.itemId; 
     $scope.etapes = []; 
     Loading.show(); 

     var loadingPromises = []; 
     loadingPromises.push(
      InspectionEtape.getByInspectionId(inspectionId).then(function (f) { 
       for (var i = 0; i < f.length; i++) { 
        var item = {} 
        item = f[i]; 
        $scope.etapes.push(item); 
       } 
      })); 
     loadingPromises.push(
      Inspection.get(inspectionId).then(function (res) { 
       $scope.completed = res.status; 
      }) 
     ); 
     $q.all(loadingPromises).then(function() { 
      Loading.hide(); 
     }) 


     $scope.itemDetails = function (id) { 
      $state.go("app.inspection_etape_comment", { inspectionId: inspectionId, etapeId: id }); 
     } 

     $scope.itemDone = function (etape) { 
      if(!$scope.completed) 
       InspectionEtape.updateChecked(etape.id, etape.done == true ? 1 : 0); 
     } 

     $scope.tryFinishInspection = function() { 
      $state.go("app.inspection_summary_edit", {inspectionId: inspectionId}); 
     } 
    }]); 

花了很多後視圖時間試圖找出問題,我決定轉向社區尋求幫助。我非常感謝!先謝謝你。如果你需要更多的澄清,請讓我知道!

回答

1

那麼我最終找到了解決方案!由於它不適用於較舊的設備,但它適用於新設備,因此我考慮在系統webview上安裝webview。所以我所做的只是安裝人行橫道webview(cordova plugin add cordova-plugin-crosswalk-webview),它解決了我的問題!

+0

對我的作品!謝謝!! –

相關問題