2013-02-26 41 views
6

Tôi đang cố gắng có hai bộ điều khiển khác nhau liên lạc với nhau.Sử dụng dịch vụ góc để chia sẻ dữ liệu giữa các bộ điều khiển

điều khiển 1

function WelcomeCtl($scope, emailService) { 
    $scope.save=function(){ 
     emailService.saveEmail(‘Hi’); 
     } 
} 

WelcomeCtl.$inject = [$scope, emailService]; 

điều khiển này được thiết kế để có những văn bản từ một trường văn bản (với ng-mô hình = 'email') và đưa văn bản vào một dịch vụ (emailService) để nó có thể được sử dụng trong ng-view tiếp theo (được điều khiển bởi bộ điều khiển tiếp theo) // cho mục đích thử nghiệm tôi chỉ đặt 'Hi' trực tiếp vào saveEmail chức năng

điều khiển 2

function SignupCtl($scope, emailService) {           
    window.alert(emailService.getEmail()) 
} 

SignupCtl.$inject = [$scope, emailService]; 

Để thử nghiệm có mục tiêu tôi đang sử dụng window.alert để hiển thị giá trị của getEmail()

emailService

angular.module('myApp.services', []) 
     .service('emailService', function(){ 
      var text =”start value”; 
      return{ 
       saveEmail:function (data){ 
        text = data; 

       }, 
       getEmail:function(){ 
        return text; 
       } 
      }; 
     }); 

Như một kết quả của việc sử dụng Controller1 và điều khiển 2 như được chỉ định với dịch vụ này, window.alert in ra “giá trị bắt đầu” thay vì 'Chào'

Khi tôi đặt nhiều hàm window.alert hơn vào mã để xem điều gì đang xảy ra, tôi thấy rằng khi save() được gọi, Controller 1 thực thi và lưu một giá trị vào dịch vụ và express.js sẽ tải trang tiếp theo. Sau đó Controller2 kích hoạt. Khi Controller 2 kích hoạt nó khởi động lại dịch vụ, thiết lập văn bản trở lại "giá trị bắt đầu". Sau đó, khi getEmail được gọi là nó trả về giá trị “giá trị bắt đầu”

Điều này làm tôi bối rối vì tôi đã ấn tượng rằng các dịch vụ không được khởi tạo mỗi khi được đưa vào bộ điều khiển.

Tài nguyên được tham khảo.
Better design for passing data to other ng-view's and persisting it across controllers

Tôi cũng làm việc trên các góc-express hạt https://github.com/btford/angular-express-seed

Trả lời

8

Angular.js chỉ hoạt động và giữ dữ liệu trên một trang duy nhất. . Nếu load lại trang của bạn (như bạn dường như để cho biết khi bạn nói "express.js tải trang tiếp theo", sau đó nó reinitialized mọi thứ

Bạn có nên:

+0

Cảm ơn rất nhiều.Tôi nghĩ rằng tôi đã chỉ chuyển đổi giữa hai ng-xem, vì vậy góc cạnh sẽ không phải tải lại, nhưng tôi đã thực tế làm những gì bạn nghi ngờ và đang chuyển đổi các trang. Thay đổi nó vì vậy tôi chỉ chuyển quan điểm và tất cả các công trình hoàn hảo. CẢM ƠN!!! – user2110481

+0

Cảm ơn bạn rất nhiều! Tôi đã tìm kiếm một thay thế cho định tuyến của Angular! –

Các vấn đề liên quan