AngularJS访问父范围

时间:2015-05-25 16:39:44

标签: angularjs angularjs-scope angularjs-injector

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

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

在这" main"查看我有以下

<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中设置消息时,会显示消息,但是当我导航到另一个控制器时,它不是。

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

我想知道:

  • 如何将消息添加到&#34; parent&#34;范围?或
  • 如何在我的Functionality2Controller或
  • 中调用MainController的方法
  • 在主页面中显示消息的其他更好方法是什么?

1 个答案:

答案 0 :(得分:1)

不同的控制器使用不同的范围,这是正确的,你应该尝试改变它。您可以做的第一件事是使用$rootScope,其中所有其他范围都是派生自的。但是这种滥用,最好的解决方案是创建一个共享的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