AngularJS - 更新不同控制器上的数据

时间:2015-11-08 22:19:42

标签: angularjs

我从这个框架开始。
我有一个关于从另一个控制器更新控制器的问题。

我知道这个问题有很多次问过。 但这不是我的问题 我可以用rootScope解决我的问题,但我不喜欢(我错了吗?)

这是我的例子:

http://jsfiddle.net/1Lwg20wz/

我认为这部分代码会自动更新:

this.article = articleService.article;

当我点击“阅读新闻”时,我想更新我的PanelController 你好吗?
什么是最佳做法?

1 个答案:

答案 0 :(得分:2)

首先在您的示例中出现几个小问题:

  1. 在以下HTML中:

    <a href="#" ng-click="selectArticle(article.index)" class="btn btn-default">
        View news
    </a>
    

    href="#"更改为href=""。否则,它将导航到应用程序的根目录,而不是执行ng-click

  2. 在同一HTML更改ng-click="selectArticle(article.index)"ng-click="main.selectArticle(article.index)"

  3. 现在主要问题。

    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>
    

    演示: http://jsfiddle.net/7ccop2hy/