簡體   English   中英

使用Angularjs將數據傳遞到不同的控制器

[英]Pass data to different controllers using Angularjs

我在一個控制器中有以下代碼。

    $scope.DataModel= [];
    $scope.DataModelTexts= { buttonDefaultText: '' };

我將在另一個控制器中使用相同的代碼。 現在,我也不想在第二個控制器中編寫相同的代碼,而是想知道是否有辦法將其放入某個工廠或服務的通用代碼中,並在兩個控制器中使用它。 我試圖閱讀有關工廠和服務的信息,但我對如何在我的方案中使用其中任何一種感到困惑。

任何信息都可以幫助我獲得有關angularjs工廠和服務的更多知識。 謝謝。

您走在正確的道路上,可以使用工廠或服務在控制器之間共享代碼。 請注意,在角度服務(和工廠)中是單例; 當應用啟動時,它們會被實例化一次,然后將其注入到控制器中時,即是在引用同一實例。 考慮以下代碼:

var myApp = angular.module('myApp',[]);

myApp.service('MyService', function() {
  let _someValue = 'Initial Value';
  this.setValue = function(value){
    _someValue = value;
  }
  this.getValue = function(){
    return _someValue;
  }
});

//First Controller Run
myApp.controller('ControllerA', function($scope, MyService) {
  MyService.getValue(); //Initial Value
  MyService.setValue("BRAND NEW VALUE!!!");
});

//Run after ControllerA
myApp.controller('ControllerB', function($scope, MyService) {
  MyService.getValue(); //BRAND NEW VALUE!!!
});

她,您將看到My​​Service保持someValue的狀態。 ControllerA將MyService注入其中,並且可以使用該服務的方法來設置新值。 現在,對於隨后的相同狀態的調用,例如ControllerB,將返回更新后的值。

您可以使用.config()run()塊(此處是否有好的SO: AngularJS app.run()文檔? )將這些重用變量綁定到$ rootScope,然后從$rootScope.DataModel$rootScope.DataModelTexts調用它們控制器或服務中的$rootScope.DataModelTexts (只要將$ rootScope注入這些控制器和服務中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM