1

promise-tracker の使用時に問題があります。

私が欲しいのは、会話を追跡することです。私のコードの一部は次のとおりです。

js:

angular.module('myModule', ['ajoslin.promise-tracker'])
  .factory('Conversation', function (promiseTracker) {
    return {
      addMessage: function (opts) {
        /* Post data to server */
        var promise = POSTING DATA;
        promiseTracker('message').addPromise(promise);
      },
      removeMessage: function (opts) {
        /* Delete data */
      }
    }
  })

  .directive('newMessage', function (Conversation) {
    return {
      scope: true,
      restrict: 'EA',
      link: function (scope) {
        scope.addMessage = function () {
          Conversation.addMessage( { /* Some opts */ } )
        }
      }
    }
  })

  .directive('Tracker', function (promiseTracker) {
    var opts = { /* Spinner opts */  }
    return {
      scope: true,
      replace: true,
      restrict: 'EA',
      templateUrl: 'tracker.html',
      link: function (scope, element, attrs) {
        /* new spinner */
        scope.tracker = promiseTracker(attrs.tracker);
        /* And some thing */
      }
    }
  })

new-message.html:

<form name="myForm" new-message>
    <input type="text" name="content" />
    <i tracker="message" ></i>
</form>

tracker.html:

<div>
    <div>
        <i ng-show="tracker.active()" ng-show="!isHidden"></i>
    </div>
    <input type="submit" value="submit" ng-click="addMessage()" ng-disabled="tracker.active()">
</div>

これらのコードを使用すると、ページにフォームが 1 つしかない場合にうまく機能します。

しかし、テンプレートにさらにフォームを追加すると、いくつかの問題が発生します。

プロミスを追跡するとき、すべてのスピナーが表示されます!

今すぐ結果(クリック)

そして、これは私が欲しいものです:

希望結果(クリック)

私のスコープに何か問題があると思います。しかし、私はそれを修正する方法がわかりません。

誰でも私を助けることができますか?どうも!

4

1 に答える 1

0

アプリの読み込み中のスピナー グラフィックを表示する場合は、グローバル スコープの promise トラッカーが必要です。この例は、公式ドキュメントから直接引用されています。

angular.module('app', ['ajoslin.promise-tracker'])

.factory('myTracker', function (promiseTracker) {
  return promiseTracker();
})

.controller('AppCtrl', function ($rootScope, myTracker) {
  $rootScope.$watch(myTracker.active, function (isActive) {
    //doSomething()
  });
});
于 2015-05-16T13:31:56.343 に答える