尝试使用我的服务将数据从一个控制器传递到另一个控制器时,我遇到了一些问题。
我一直在使用$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);
};
在服务中,我只是返回该数据-
var selectedContactInfo = function(contact) {
return contact;
};
在同一事件期间,如何在Controller B中访问此数据并将其显示在我的视图中。
Here is the reference Link: http://plnkr.co/edit/beOmiv?p=info
我不想使用$rootScope
,但是我想将数据访问到另一个控制器上。
您可以为此使用角度服务。
角度服务是单例,您将它们注入控制器中,因此可以在两个不同的控制器中注入相同的服务,从而有效地在它们之间传递状态。
假设您的服务中有一个属性,可以称为selectedUserID。当您单击特定的行时,您将更新此属性。然后,在下一个控制器中,注入相同的服务,并使用此属性确定要加载的详细信息。
这样您就可以在服务内部拥有一个如下所示的方法:
updateSelectedUser = function(userID) {
this.selectedUserID = userID;
}
然后,您的控制器会在点击操作发生时从服务中调用此方法:
myService.updateSelectedUser($scope.selectedUserID);
当然,这只是一个示例,您可以在其中放置自己的价值观。
要记住的一件事:服务可以保持状态,它们毕竟是对象并且是单例的,因此您总是要注入相同的实例。
确保存储在服务内部的状态没有被不通过该服务的外部动作修改是有意义的。换句话说,请确保没有其他更改此selectedUserID,以使您的服务状态数据永不同步。如果您能做到这一点,那么您就是金。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句