2017-04-25 110 views
0

我在一個控制器中有下面的代碼。使用Angularjs將數據傳遞到不同的控制器

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

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

任何信息都會幫助我在angularjs中獲得更多關於工廠和服務的知識。謝謝。

+0

檢查此SO文檔http://stackoverflow.com/documentation/angularjs/1923/sharing-data/26454/sharing-data-from-one-controller-to-another-using-service#t=201704260743521596768 –

回答

1

你在正確的軌道上,使用可以使用工廠或服務來共享控制器之間的代碼。請注意,角度服務(和工廠)是單身人士;它們在應用程序啓動時實例化一次,然後在任何時候將其注入控制器時,您都引用相同的實例。考慮下面的代碼:

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

她你會看到MyService保存someValue的狀態。 ControllerA將MyService注入到它並可以使用該服務的方法來設置新值。現在,對於相同狀態的任何後續調用,例如ControllerB,將返回更新後的值。

0

可以使用.config()run()塊(好等等這些在這裏:AngularJS app.run() documentation?)綁定這些重複使用變量$ rootScope,然後從$rootScope.DataModel$rootScope.DataModelTexts從您的控制器或服務中調用它們(只要你注入$ rootScope進入這些控制器和服務)。

相關問題