0

ユーザーがリンクをクリックするたびにスピナーを表示および非表示にしたいだけです。この場合、promise を使用して実際のクリック メソッドをラップしています。

何らかの理由で、ディレクティブがスコープ内にある値をテンプレートの ng-class にバインドしていないようです

何か案は?

   app.directive('toogleTextLink', function($compile,$q) {
    return {
        restrict: 'AE',
        scope: { callback: "&targetMethod" },
        template: '<div><a style="cursor: pointer" ><b>{{text}}</b></a> <div ng-class="{previewLoader: show}"></div></div>',
        link: function (scope, element, attr) {
            scope.value = attr.value;
            scope.show = false;
            scope.$watch('value', function () {
                    if (scope.value) {
                        scope.text = "yes";
                    } else {
                        scope.text = "no";
                    }
            });
            element.bind('click', function () {
                scope.show = true;
                scope.value = !scope.value;
                scope.$apply();
                if (scope.callback) {

                    var deferred = $q.defer();
                    deferred.resolve(scope.callback());
                    deferred.promise.then(function () {
                        scope.show = false;
                        console.log("then called");
                    });
                }

            });
        }
    };
});

プランカーを見てください

4

1 に答える 1

0

問題は、スピナー (CSS) のサイズを縫い合わせており、約束をすぐに解決しているため、スピナーを見ることができません。

これらの変更を確認してください http://plnkr.co/edit/viwzCb?p=preview

于 2013-11-06T06:33:03.003 に答える