2016-01-14 71 views
0

因此,我有一個ng重複的項目列表。Angular:服務將數據傳遞給另一個Controlelr

<li><a ng-click="{{person.id}}">Name of Person</a></li> 

我想創建一個服務,其中,上點擊,我可以收集person.id並把它傳遞到另一個控制器在不同的路線。

這通常會很簡單,只需使用url和route params,但是在這種情況下,person.id不會暴露在瀏覽器url中。

- 更多的上下文

無論是服務還是不行,我需要提取{{person.Id}}是通過人員名單頁面上的NG-重複的數據。

點擊後,我將從人員控制器移動到具有「人員」控制器的新路線。我需要那個「人」控制器能夠拉動在之前的路線上點擊的{{Person.ID}},以便在數據庫中查找該人員。

任何幫助都會非常棒!

+0

爲什麼你不希望顯示在URL中的人ID?這不是密碼,它只是一個ID。 –

+0

是的,奇怪的驗收標準。這是我過去所做的,也是我的第一個傾向。但它被給了一個很大的不。大聲笑 – Brock

+0

但是...爲什麼?這基本上是正確做到這一點的唯一方法。如果您不這樣做,並且您刷新頁面,或稍後爲其添加書籤,或通過電子郵件發送其URL,則會失敗。我有這種感覺,那些給你這些標準的人並不瞭解網絡的工作原理。 –

回答

0

服務並不意味着直接與DOM元素進行交互。 DOM應該與指令/控制器交互。控制器應該與模型交互。

下面的示例演示瞭如何將數據從控制器1發送到myFactory,然後控制器2從myFactory中獲取值。

angular 
 
    .module('app', []) 
 
    .factory('myFactory', myFactory) 
 
    .controller('myCtrl1', myCtrl1) 
 
    .controller('myCtrl2', myCtrl2); 
 

 
    function myFactory() { 
 
    var fromSender = null; 
 
    return { 
 
     setSender: function(sender) { 
 
     fromSender = sender; 
 
     }, 
 
     getSender: function() { 
 
     return fromSender; 
 
     } 
 
    }; 
 
    } 
 

 
    function myCtrl1(myFactory) { 
 
    var vm = this; 
 
    vm.setSender = myFactory.setSender; 
 
    } 
 

 
    function myCtrl2(myFactory) { 
 
    var vm = this; 
 
    vm.getSender = myFactory.getSender; 
 
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.js"></script> 
 

 
<div ng-app="app"> 
 
    <div ng-controller="myCtrl1 as ctrl1"> 
 
    Controller 1: <br> 
 
    <button ng-click="ctrl1.setSender('from controller 1')">Send to myFactory</button> 
 
    </div> 
 
    <hr> 
 
    <div ng-controller="myCtrl2 as ctrl2"> 
 
    Controller 2: <br> 
 
    value from ctrl1 via myFactory: {{ctrl2.getSender()}} 
 
    </div> 
 
</div>

+0

太棒了!感謝您對此的幫助/澄清。 – Brock

0

Angular的所有服務都是單身。所以如果你注入personService或類似的東西,在多個控制器中,那些控制器將使用完全相同的對象。所以如果你在該服務上設置了一個值,那麼其他控制器將能夠看到它。

隨着更多的代碼和上下文,我將能夠給出一個更具體的例子。

相關問題