2016-01-14 188 views
0

我正在創建一個應用程序與Angular。應用中有一個表單供用戶輸入字符串。當用戶輸入一個字符串,這就要求使用功能NG提交:角度設置變量可以訪問任何範圍

ng-model="input1" ng-submit="update()" 

之內的更新功能,那麼我可以用

$scope.input1 

我希望做的是讓進入輸入1的值該值只能在更新函數的範圍之外訪問,以便它可以在角度應用程序中被其他任何東西調用。

理想情況下,我想能夠更新thing1:

var app = angular.module('app1, []); 
var thing1 = "value from input" 

我經歷過的文檔和我想也許我需要做的是設置一個app.value,所以:

var app = angular.module('app1, []); 
app.value('thing1', "value from input") 

然後在提交函數中設置thing1的值,以便它更新app.value,但這不起作用。

我不知道我該如何做到這一點。有什麼想法嗎?

+0

也許$ root.input1? – Evgenii

+1

您應該使用角度服務在控制器之間共享數據。 – Dan

回答

0

如果有人有興趣,我創建了一個服務如下:

app.service('thing', function(){ 
var string1 = '123' 
return{ 
getString: function(){ 
    return string1; 
    } 
setString: function(value){ 
string1 = value; 
} 

然後控制器中我添加的東西服務:

app.controller('myController', function(thing){ 
controller code 
}); 

我可以把一個值放入'東西'服務從任何範圍使用:

thing.setString($scope.valueIwantToSet) 

或者得到一個值從任何範圍使用:

$scope.variableIwantToUse = thing.getString(); 
-2

我盡我所能,你需要創建一個像全局變量。嘗試使用$rootScope。這是所有其他範圍的父範圍。您可以在任何控制器中注入並訪問它,這樣您就可以讀取/寫入您的值。這裏是例子。

function Controller1($scope, $rootScope) { 
    $rootScope.someVar = "Some value"; 
} 

function Controller2($scope, $rootScope) { 
    $rootScope.someVar2 = $rootScope.someVar; 
    $rootScope.someVar = "Some new value"; 
} 

你只注入$rootScope到一些控制器,設置的值,然後注入到其他這和剛纔讀的價值。

希望這會有所幫助!

+0

這會污染* global * ng-scope並使其隱式可用於應用程序中的所有內容。 OP應該通過服務使用明確的請求。 – jusopi

+0

服務並非總是必需的。有時候你想要所有的控制器和它們的作用域都可以訪問變量,並且每次注入一個服務並將它綁定到作用域會比它的價值更麻煩。 OP只需要知道綁定到$ rootScope的東西的後果,並且無處不在(包括子範圍的繼承等)。 雖然這個答案可以改善,但它並沒有顯示出良好的用法 –

+0

考慮到大多數ng1.x正在擺脫整個$ scope範例,而ng2甚至沒有它,我仍然建議不要這樣做最*極端*的情況。如果注入到處都很痛苦,請使用mixin或子控件。在此之前還有很多其他的編程範例需要考慮。 – jusopi

1

定義一個服務或價值(正如你猜測的那樣)。這是做你想做的事情的方式。

.service('appService', function(){ 
    var srvc = {}; 
    srvc.input1 = 'foo' 

    return srvc 
} 

.value('input1', { data: 'foo' }) 

如果您使用的值,那麼你需要使用一個對象作爲字符串和數字是不可變的。如果你去那條路線,你可能會考慮一個values的值,你存儲多個值。

然後你注入的是,你需要訪問它:

.controller('SomeController', function($scope, appService){ 
    $scope.doSomething = function(){ appService.input1 = 'bar' } 
}) 

.controller('AnotherController', function ($scope, $q, appService){ 
    $scope.myInput = appService.input1 
})