从另一个页面添加数据库(couchbase)中的项目后,如何从 angular.js 中的页面更新列表?
Posted
技术标签:
【中文标题】从另一个页面添加数据库(couchbase)中的项目后,如何从 angular.js 中的页面更新列表?【英文标题】:how to upate the lists from a page in angular.js after adding an item in the database(couchbase) from another page? 【发布时间】:2013-10-21 18:32:50 【问题描述】:在创建页面中创建新列表后,我们在更新仪表板页面上的数据列表时遇到问题。它已保存在数据库中,但未在视图中更新。一旦我单击浏览器上的刷新按钮,它就会更新,但这是一个单页网络应用程序。从上一页添加数据后,如何在不刷新页面的情况下更新仪表板页面上的列表?我使用 couchbase 作为数据库。
【问题讨论】:
【参考方案1】:这里的问题是您正在从持久存储中加载内容,然后它按原样处于角度状态,并且要检索任何更新,您必须从持久存储中重新获取它。不幸的是,$watch 后端并不是那么简单。
您在这里有一些选择:如果您是从网站的角度组件中进行更改,那么您可以在创建一个重新触发您的 db-access 代码并刷新的新页面时调用一个函数模型。
如果您从 Angular 外部进行更改,那么您将需要使用轮询来定期刷新您的 Angular 模型,或者选择更高级的 web-socket 选项,如 here. 所解释的那样
【讨论】:
我试过这种方式,在我的createpage上保存数据后,我添加了这个代码:rootScope.$broadcast('event: list updated', true); location.path('/quizmaster/dashboard');当第二个页面控制器通知该广播事件时,它将调用显示数据的函数。 rootScope.$on("event: list updated", function(value) console.log('event update'); // 调用 gameList 函数显示列表 gameList.async(); );重定向到第二个控制器(即仪表板页面)时会触发该事件,但不会更新列表。 gamelist.async函数是否调用数据库? 我为此创建了另一个页面,提供了我的代码以供进一步理解。 ***.com/questions/19396040/…【参考方案2】:在阅读了这个问题和你的other question 之后,我的猜测是,你从沙发上得到了旧的看法。
默认情况下,couchbase 将 stale
参数设置为 update_after
,这会导致仅在第二次访问后才能获得更新的视图,有关详细信息,请参阅 the couchbase documentation。
要解决此问题,将stale
设置为false
就足够了。
如果您通过 REST 调用访问 couchbase,将 ?stale=false
添加到调用中应该可以解决问题,否则根据您使用的 SDK specification 添加参数。
【讨论】:
以上是关于从另一个页面添加数据库(couchbase)中的项目后,如何从 angular.js 中的页面更新列表?的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin MVVM 从另一个页面删除 Listview 项目