Javascript 使用AngularFire创建用户并调用工厂显示通知

Javascript 使用AngularFire创建用户并调用工厂显示通知,javascript,angularjs,firebase,angularfire,angular-promise,Javascript,Angularjs,Firebase,Angularfire,Angular Promise,我是AngularJS新手,尝试将其与AngularFire/Firebase结合使用来存储一些项目数据。我建立了一个工厂,它应该处理通知,将它们显示在中心位置。工厂是这样的: myApp.factory("AlertService", function($timeout){ var alerts = new Array(); var addAlert = function(type, message){ alerts.push({ type: type,

我是AngularJS新手,尝试将其与AngularFire/Firebase结合使用来存储一些项目数据。我建立了一个工厂,它应该处理通知,将它们显示在中心位置。工厂是这样的:

myApp.factory("AlertService", function($timeout){
  var alerts = new Array();

  var addAlert = function(type, message){
    alerts.push({
      type: type,
      msg: message
    });
    $timeout(function(){
      removeAlert(alerts.length - 1);
    }, 3000);
  }

  var removeAlert = function(index){
    alerts.splice(index, 1);
  }

  return{
    alerts : alerts,
    addSuccessAlert : function(message){
      addAlert("success", message);
    },
    addDangerAlert : function(message){
      addAlert("danger", message);
    },
    deleteAlert : function(index){
      removeAlert(index);
    }
  };
});
绑定我使用的$watch控制器中的数据

$scope.$watch( function () { return AlertService.alerts; }, function ( alerts ) {
  $scope.alerts = AlertService.alerts;
});
并在index.html中放置了一个div:

<div id="alert">
  <alert ng-repeat="alert in alerts" type="{{alert.type}}">{{alert.msg}}</alert>
</div>
知道我(愚蠢地)做错了什么吗?提前谢谢


编辑:这里是Plnkr,您只使用Firebase JavaScript库,而不是。AngularFire构建在Firebase JS库和AngularFire之上。AngularFire做了很多有用的事情,例如,自动同步和(您可能想在数组示例中检查一下)。AngularFire还处理
$scope。正确应用
。这样,任何更新都将应用于视图

如果选择不使用AngularFire,则需要在
$timeout
服务中包装更新视图的代码部分

  $scope.createUser = function(){
    ref.createUser({
        email    : "a.b@c.com",
        password : "mypassword"
      }, function(error) {

        // this will update the view because it's wrapped in $timeout
        $timeout(function() {
          if (error === null) {
            console.log("User created successfully");
            AlertService.addSuccessAlert("User created successfully");
          } else {
            console.log("Error creating user:", error);
            AlertService.addWarningAlert("Error while creating user");
          }
        });

      });
  }

我强烈建议好好阅读AngularFire文档。这将为您的项目节省大量的时间。

您能在Plunkr或JSBIN中重现这一点吗?谢谢您的快速回复。这里的提示:“点击时添加警报”正在运行。如果选择“在回调时添加警报”,console.log()操作正在工作,但不会显示通知。如果您多次单击“在回调时添加警报”按钮,某些通知将显示Works!非常感谢。此时我没有使用AngularFire,因为我不想将通知存储在DB中。但由于接下来是用户处理,我很可能会回到您的其他链接;)再次感谢@andinho,你在这里的评论没有任何意义。您正在调用上面的push(),但声明不希望将数据存储在“DB”中(Firebase不是数据库,它是实时持久层)。AngularFire与用户处理无关。这是一个实时绑定,可以将Firebase数据与Angular的视图同步,非常适合上面的内容。另外,大卫的回答也很贴切。
  $scope.createUser = function(){
    ref.createUser({
        email    : "a.b@c.com",
        password : "mypassword"
      }, function(error) {

        // this will update the view because it's wrapped in $timeout
        $timeout(function() {
          if (error === null) {
            console.log("User created successfully");
            AlertService.addSuccessAlert("User created successfully");
          } else {
            console.log("Error creating user:", error);
            AlertService.addWarningAlert("Error while creating user");
          }
        });

      });
  }