【问题标题】:How to disable firebase 3-way data binding如何禁用 Firebase 3 向数据绑定
【发布时间】:2023-04-05 18:16:01
【问题描述】:

我正在使用带有 angularfire 和 firebase 的 angularJS 1.3。

我确实创建了一些封装 firebase 对象的工厂,而且效果很好。 3 路数据绑定真的很酷。

我计划使用 firebase 构建一个大型应用程序以实现数据持久性,但我面临一个大问题:

在我的业务模型中,我希望某些模型/集合支持 3 路数据绑定,但我希望其他集合不实时更新。

访问生成的网站的一些客户在看到网站内容实时更新时可能会感到害怕 - 我不希望这样。 想象一下,您正在阅读一篇文章,不知何故冗长而复杂,您将注意力集中在一个您无法理解的段落上,突然,该段落消失并被一个新段落所取代。现在假设您对 Web 开发一无所知。您可能会开始考虑向一些专业人士咨询您的心理健康问题,或者认为您的计算机被黑客入侵了。谁知道!

所以我想为这篇文章禁用 3 路数据绑定,并避免这种边界线客户端电话呼叫。我发现的唯一解决方案是不使用 fireangular,而是使用 beyond angularfire documentation section,并删除以下行:

ref.on("value", function(snapshot) {
   $timeout(function() {
     $scope.data = snapshot.val();
   });
});  

这将解决问题,但是在我的管理界面中,我必须实现第二个工厂,以便管理员用户可以访问文章的 3 路数据绑定 - 这不是很干燥。

在我的文章控制器中,我必须这样写:

$scope.loadArticle = function(){
   if(UserService.type === 'admin'){
       AdminArticleFactory.get(id);
   }
   else{
       ArticleFactory.get(id);
   }
}

还有其他方法可以设置 firebase 以禁用拉取更新吗?

【问题讨论】:

  • 这没有任何意义。它说:“我想同步但不同步。”如果您不希望其他客户端看到数据,则不要写入他们正在侦听的路径。写入不同的路径。听起来您在尝试编写应用程序时没有先阅读文档并了解您正在使用的工具,这将是痛苦和浪费时间的秘诀。
  • @Kato 感谢您的“建设性”评论。请澄清您对写入不同路径的建议的评论,我想为一类用户同步,而不是为客人同步。把“but”换成“and”,就对了。 “我想同步而不是同步”

标签: angularjs firebase angularfire


【解决方案1】:

是的,这也是我遇到的。有时您会重复使用 Firebase。存储数据时也是如此。我建议只创建一个函数来保存您不想立即更新的数据。

<button ng-click="saveChanges">save</button>

在控制器中

$scope.saveChanges = function () {
var obj = $firebaseObject(ref);
obj.foo = "bar";
obj.$save().then(function(ref) {
  ref.key() === obj.$id; // true
}, function(error) {
  console.log("Error:", error);
});
}

编辑

要取消同步 firebase 对象/数组,您可以按照以下答案操作:How to disassociate angularFire bound object?

【讨论】:

  • 我认为$save()函数会自动更新所有连接的客户端。
  • 什么意思?你把事情复杂化了......firebase.com/docs/web/libraries/angular/…
  • 当 $save 函数被触发时,firebase 将这些更改传播到所有连接的浏览器,我想控制这样的行为:仅传播到管理员用户加载的 FirebaseArray,这似乎不是目前实施。所以我想实现这个逻辑的唯一方法是在客户端忽略传播的数据,我不知道如何实现。
  • @Coluhuru 如果您不想要这种行为,那么拥有实时后端有什么意义?但是我不确定您是否曾经阅读过文档,但它就在那里:firebase.com/docs/web/libraries/angular/… 这里是一个较旧的答案,但与您的问题相关stackoverflow.com/questions/18144812/…
  • 嗨@Mikey,感谢您提供有关 disassociate() 函数的 SO 链接。请将答案复制粘贴到 SO 链接中,我会将其标记为已解决。在提出这个问题之前,我已经多次阅读了 firebase 文档,但我没有意识到在 promise 中传递的 ref() 函数确实取消了实时同步的关联。我已经解释了为什么在某些情况下我想使用实时 Firebase 存储,但又想为某些用户禁用实时更新。
猜你喜欢
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多