2

angular-flashを使い始めたばかりで、メッセージが表示されますが、どこでメッセージをクリアすればよいですか?

すべてのアクションで flash.message('') を設定するだけですか、それともルートのどこかに配置しますか? フェードアウトするようにタイマーでこれを行う方法はありますか? コードにタイムアウト機能があることがわかりましたが、どこで初期化すればよいですか?

4

3 に答える 3

1

クリアするための答えを見つけました:

  flash('notice', 'User details updated!')
  $location.path "/users/#{$stateParams['id']}"
  $timeout (-> flash()), 2000
于 2013-09-12T01:10:14.680 に答える
1

ソースコードを調べて、何が起こっているのかを把握しようとしています。メッセージをクリアしたいときにこれを行うと、手早く修正できます。

flash([]);

すべてのフラッシュ メッセージは配列にあるため、任意の配列のように処理できると思います。

私が汚いと言っている理由は、clear() や empty() 関数のようなものを使って、これを行うためのより良い方法があると想定しているからです。

于 2013-09-11T07:07:03.250 に答える
0

独自のサービスでラップできます。

'use strict';

angular.module('myApp')
  .service('ff', ['$rootScope', 'flash', '$timeout', function ($rootScope, flash, $timeout) {

    var log = function(level) {

      function inner(msg, sticky) {
        if (level == 'info') flash(msg);
        else flash(level, msg);
        var promise = $timeout(function() {
          var idx = _.findIndex($rootScope.messages, ['text', msg]);
          $rootScope.messages.splice(idx, 1);
        }, 2000);
        if (sticky) {
          $timeout.cancel(promise);
        }
      }

      return inner;
    };

    return {
      info: log('info'),
      error: log('error'),
      warn: log('warning'),
      success: log('success')
    };
  }]);

そしてコントローラーで:

ff.info("This will go away.");

ff.error("This will stick", true);

flash配列に追加するだけでなく、複数の呼び出しを行うのは残念です。つまり、この行を次のように置き換えます。

if (typeof $scope.messages !== 'undefined') {
  $scope.messages = $scope.messages.concat(messages);
} else {
  $scope.messages = messages;
}
于 2018-01-12T11:26:09.513 に答える