0

我是 angularjs 的新手,我正在尝试做一些我不知道是否是一个好习惯的事情。

好吧,我有一个主页,我想在其中显示所有其他控制器和视图的消息。

在这个“主要”视图中,我有以下内容

<div class="row" data-ng-repeat="msg in messages">
    <div class="col-lg-12">{{mgs.message}} 
        <a data-ng-click="close(msg)">&times;</a>
    </div>
</div>

当我在 MainController 中设置消息时,会显示该消息,但是当我导航到另一个控制器时却没有。

谷歌告诉我这是因为我正在使用不同的范围。

我想知道:

  • 如何将消息添加到“父”范围?或者
  • 如何在我的 Functionality2Controller 中调用 MainController 的方法或
  • 在主页中显示消息的其他更好方法是什么?
4

1 回答 1

1

不同的控制器使用不同的范围,这是正确的,你应该尝试改变它。您可以做的第一件事是使用$rootScope,所有其他范围都是从该范围派生的。但是这种误用,imo更好的解决方案是创建一个共享的messageService:

.factory('messageService', [
  function() {
    var messages = [];

    return {
      getMessages: function() {
        return messages;
      },
      addMessage: function(message) {
        messages.push(message)
      }
    }
  }
])

并将其注入您的控制器:

.controller('ctrl', ['$scope', 'messageService',
  function($scope, messageService) {
    $scope.messages = messageService.getMessages();
  }
])

Plunker:http ://plnkr.co/edit/6cnbx9okRA03tut7JzuF?p=preview

于 2015-05-25T16:55:40.210 回答