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

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

本文关键字:控制器 数据 其他 服务 事件 访问 一个      更新时间:2023-09-26

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

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

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

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

我就是这样处理的。

<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);
            };

在Service中我只是返回那个数据-

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,这样您的服务状态数据就不会失去同步。如果你能做到这一点,那么你就成功了。