Próbuję stworzyć prostą usługę przesyłania wiadomości (patrz jsFiddle) przy użyciu AngularJS i działa w większości. Jednak moja metoda „clearAlerts()” nie wydaje się mieć żadnego efektu. Jestem nowy w Angular, więc nie jestem pewien, co robię źle?

Oto jsFiddle http://jsfiddle.net/uberspeck/j46Yh/

...i kod

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

function AlertsCtrl($scope, alertsManager) {
    $scope.alerts = alertsManager.alerts;
}

function FooCtrl($scope, alertsManager) {
    $scope.doGood = function() {
        alertsManager.addAlert('Yay!', 'alert-success');
    };
    $scope.doEvil = function() {
        alertsManager.addAlert('Noooo!', 'alert-error');
    };
    $scope.reset = function() {
        alertsManager.clearAlerts();
    };
}

App.factory('alertsManager', function() {
    return {
        alerts: {},
        addAlert: function(message, type) {
            this.alerts[type] = this.alerts[type] || [];
            this.alerts[type].push(message);
        },
        clearAlerts: function() {
            this.alerts = {}; // <= not working??
        }
    };
});​
1
Brian 19 październik 2012, 06:09

2 odpowiedzi

Najlepsza odpowiedź

Paweł Kozłowski udzielił mi odpowiedzi za pośrednictwem listy dyskusyjnej AngularJS. Po prostu musiałem zmienić jedną linię w moim AlertsCtrl...

function AlertsCtrl($scope, alertsManager) {
    $scope.alertsManager = alertsManager;
}

Sprawdź nowy działający jsFiddle

0
Ben Lesh 26 październik 2012, 18:45

Alternatywnym rozwiązaniem jest po prostu usunięcie właściwości z alertów.

http://jsfiddle.net/j46Yh/4/

    clearAlerts: function() {
        for(var x in this.alerts) {
           delete this.alerts[x];
        }
    }
0
Ben Lesh 25 październik 2012, 23:15