0

編集できるテーブルがあります。しかし、ページネーションでページを変更すると、編集した値が削除されます。ページを変更するときに保存機能を呼び出そうとしましたが、それもうまくいきません。
私はこのようなテーブルを持っています:

...
<table>
...
<th>
              <span class="input-group-btn">
                <button type="button" class="btn btn-default" ng-show="!valueForm.$visible" ng-click="valueForm.$show()">
                  Edit
                </button>
              </span>
            </div>
            <form editable-form name="valueForm" onaftersave="$ctrl.saveColumn('valueTranlate')" ng-show="valueForm.$visible">
              <button type="submit" ng-disabled="valueForm.$waiting" class="btn btn-primary">
                Save
              </button>
              <button type="button" ng-disabled="valueForm.$waiting" ng-click="valueForm.$cancel()" class="btn btn-default">
                Cancel
              </button>
            </form>
          </th>
...
<tr dir-paginate="v in my array>
...
</table>
  <dir-pagination-controls auto-hide="false" on-page-change="$ctrl.saveColumn()" boundary-links="true" max-size='7'></dir-pagination-controls>
...
my .js
saveColumn() {
        if (this.$scope.valueForm.$visible) {
          angular.forEach(this.langV, (value) => {
            this.$http.patch('/api/dict_values/' + value.v_id, {
              id: value.v_id,
              value: value.value2,
              user_id: this.currentUser()._id,
              key_id: value._id,
              lang_id: this.$scope.select2
            });
          });
          this.showLang(this.$scope.select1, this.$scope.select2);
        }
      }

したがって、それを呼び出すsaveColumn()と、すべてのページのすべてのフィールドが繰り返され、値が保存されますが、他のページの編集は「削除」されるため保存されません。ページの変更時に呼び出しsave()を試みましたが、値は よりも速く「削除」されますsave()

では、すべてのページで編集でき、ページを変更しても値が忘れられないようにするにはどうすればよいでしょうか?

4

1 に答える 1

1

すべての編集値を「記憶」するファクトリーを追加することで解決しました。
何かが起こるたびにこのファクトリーをトリガーするために、テキストエリアに ng-change を追加しました。

 <span editable-textarea="v.value2"  e-ng-change="$ctrl.remember(v,$data)" e-name="valueTranslate" e-form="valueForm" e-rows="3" e-cols="25" onbeforesave="$ctrl.checkName($data)">
              {{v.value2 || '' }}
            </span>

最初にremember(v,$data)関数 を呼び出す

      // Remember Edits for Pagination
    remember(obj, data) { //obj-> actual edited, data -> the input

        if (obj.close === undefined || obj.close === '' || obj.close === null) {
          obj.close = obj.value2;
        }// Attaching a Close property for the Case the User cancel the Edits

        obj.value2 = data;// saving the Edits in value2, this is which is get send to DB

        this.rememberValues.addValue(obj); // and send to Factory
      }

次に、それを工場に保存して、ChangePangeによって編集が消去されないようにします

.factory('rememberValues', () => {
  var valuesE = [];
  var savingValue;
  return {
    values: () => {
      return [].concat(valuesE);//for output and saving,contains all edited fields
    },
    addValue: (obj) => {//adding in Array
      savingValue = _.find(valuesE, function(value) {
        return value._id === obj._id;
      });
      if (savingValue) {
        savingValue.value2 = obj.value2;
      } else {
        valuesE.push(obj);
      }
    },
    clear: () => {//if I want to clear the Array
      angular.forEach(valuesE, (value) => {
        delete value.close;
      });
      valuesE = [];
    },
    cancel: () => {// The User Cancels the Edits
      angular.forEach(valuesE, (value) => {
        value.value2 = value.close;// Original Value is put in again
        delete value.close;
      });
      valuesE = [];
    }
  };
})
于 2016-10-19T09:03:51.817 に答える