angularjs benutzerdefinierte bestätigen-box

So, ich bin versucht zu implementieren eine benutzerdefinierte bestätigen-box mit Winkel. Im Idealfall würde ich einfach gern ein Attribut hinzuzufügen um die Funktionalität zu aktivieren. Beispiel:

<button type="button" ng-click="delete(foo)">Delete</button>  ->  <button type="button" ng-click="delete(foo)" ng-confirm="Are you sure you want to delete this foo?">Delete</button>

(foo ist in einem ng-repeat... foo in fooList..)

So, alle Probleme, die ich habe drehen sich um das binden des click-Ereignisses, das normalerweise geschehen würde, um eine andere Taste. Ich habe eine separate Richtlinie "confirmBox" zu schaffen, der meine modal (nicht mit bootstrap) und behandeln alle zeigen/ausblenden/etc.

Was ich momentan verwende, muss ich mein alter ng-click-Funktionen, die ich wirklich wollen, um Weg von:

Aktuelle Implementierung:

<button ... ng-click="confirm('Are you sure you want to delete this foo?, 'delete', foo)">Delete</button>

var confirmModule = angular.module('confirm', []);

confirmModule.run(function($rootScope) {
    $rootScope.confirm = function(text, func, obj) {
        $rootScope.$broadcast('confirm', func, obj, text);
    };
});

confirmModule.directive('confirmBox', function($parse) {

    return {
        restrict: 'A',
        template: myModalTemplate,
        link: function(scope, element, attrs){
            element.hide();
            var noBtn = element.find("[name='no']");
            noBtn.bind("click", function() {
                element.hide();
            });
            scope.$on("confirm", function(event, func, obj, text) {
                var yesBtn = element.find("[name='yes']");
                element.show();
                yesBtn.unbind("click").bind("click", function() {
                    scope[func](obj);
                });
            });
        }
    }
});

Jemand irgendwelche Ideen? Ich begann, indem die Richtlinie für die Schaltfläche und dann unverbindlich das click-Ereignis so ng-click nicht ausgelöst. Dann bin ich Links mit der Zeichenfolge 'delete(foo)' von der ng-click Attribut, das ich ausführen kann, mit $parse(attrs.ngClick)(scope), aber ich weiß nicht, wie zu binden, dass Sie in separaten Richtlinien-button klicken.

Edit: Hier ist ein Turnschuh mit meinem aktuellen Versuch der Umsetzung. Das problem ist die variable, die übergeben wird in der Funktion ist immer undefiniert.

http://jsfiddle.net/UCtbj/2/

Edit2: Aktualisierung, Umsetzung, jedoch glaube ich nicht so besonders, wie es links der beiden Richtlinien zusammen, durch welche die anderen Richtlinien-Elemente.

http://jsfiddle.net/UCtbj/3/

InformationsquelleAutor James Kleeh | 2013-06-17
Schreibe einen Kommentar