如何将数据从一个控制器传递到服务并在同一事件上访问其他控制器上的数据?

How to pass Data from One Controller to Service and access that data on Other Controller on same event?

我在尝试使用我的服务将数据从一个控制器传递到另一个控制器时遇到了一些问题。

我一直在我的控制器中使用 $rootScope 实现原型继承并广播该对象,以便我可以在其他控制器中访问该数据。

因为我正在使用 $rootScope,我正在污染全局命名空间,我想将数据从这个控制器传递到另一个控制器。

我只是在 table 中显示最少的数据,当用户单击 table 的特定记录时,我想在对象中显示整个数据。

我就是这样处理的。

<tr ng-repeat="contact in filterContacts = (contacts.contactsData | filter:sensitiveSearch | orderBy:selectBox) " ng-style="{'background-color': contact.email == selectedContact.email ? 'lightgrey' : ''}" ng-click="selectContact(contact)">

在控制器 A 中:我从视图中调用此函数并注入特定的行联系人详细信息。

$scope.selectContact = function(contact) {
                contactService.selectedContactInfo(contact);
            };

在服务中,我只是返回该数据 -

var selectedContactInfo = function(contact) {
            return contact;
        };

如何在同一事件期间访问控制器 B 中的此数据并将其显示在我的视图中。

Here is the reference Link: http://plnkr.co/edit/beOmiv?p=info

我不想使用 $rootScope,但我想将数据访问到另一个控制器。

您可以为此使用 angular 服务。

angular 服务是单例的,您将它们注入到控制器中,这样您就可以将相同的服务注入到两个不同的控制器中,并且可以有效地在它们之间传递状态。

假设您的服务中有一个 属性,可以称为 selectedUserID。单击特定行时,您会更新此 属性。然后在下一个控制器中,注入相同的服务并使用此 属性 确定要加载的详细信息。

所以你可以在你的服务中有一个方法,看起来像这样:

updateSelectedUser = function(userID) {
    this.selectedUserID = userID;
}

当点击动作发生时,您的控制器然后从服务调用此方法:

myService.updateSelectedUser($scope.selectedUserID);

当然这只是一个例子,把你自己的价值观放在那里。

要记住一件事:服务可以保持状态,毕竟它们是对象和单例,所以你总是注入同一个实例。

确保存储在服务内部的状态不会被不通过此服务的外部操作修改是有意义的。换句话说,确保没有其他东西改变这个 selectedUserID,这样你的服务状态数据永远不会不同步。如果你能做到这一点,那你就是金子。