我从这个框架开始。
我有一个关于从另一个控制器更新控制器的问题。
我知道这个问题有很多次问过。 但这不是我的问题 我可以用rootScope解决我的问题,但我不喜欢(我错了吗?)
这是我的例子:
我认为这部分代码会自动更新:
this.article = articleService.article;
当我点击“阅读新闻”时,我想更新我的PanelController
你好吗?
什么是最佳做法?
答案 0 :(得分:2)
首先在您的示例中出现几个小问题:
在以下HTML中:
<a href="#" ng-click="selectArticle(article.index)" class="btn btn-default">
View news
</a>
将href="#"
更改为href=""
。否则,它将导航到应用程序的根目录,而不是执行ng-click
。
在同一HTML更改ng-click="selectArticle(article.index)"
至ng-click="main.selectArticle(article.index)"
。
现在主要问题。
在PanelController
中,您有以下代码:
this.article = articleService.article;
这会将articleService.article
中存储的引用复制到this.article
。
如果articleService.article
持有对id为1的文章对象的引用,this.article
现在也拥有对该对象的引用。然而,它们是两个不同的参考文献。
您可以使用以下代码设置所选的文章对象:
this.selectArticle = function(setArticle) {
articleService.article = articleService.articles[setArticle - 1];
};
现在articleService.article
将保存对另一篇文章对象的引用,例如ID为2.但this.article
中的PanelController
仍将保留对ID为1的文章对象的引用。
实现您想要的最简单的解决方案是在视图中使用原始articleService.article
引用,而不是创建它的副本。
在PanelController
this.articleService = articleService;
在HTML中:
<h1>{{panel.articleService.article.title}}</h1>
<p>{{panel.articleService.article.content}}</p>