2016-01-14 2 views
0

Я создаю приложение с угловым. В приложении есть форма для ввода пользователем строки. Когда пользователь вводит строку это вызывает функцию с помощью нг-представить:угловой набор переменной, доступной для любой области

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

В функции обновления можно затем получить доступ к значению input1 с помощью

$scope.input1 

То, что я хотел бы сделать, это позволить это значение должно быть доступно вне сферы действия функции обновления, так что оно может быть вызвано чем-либо еще в угловом приложении.

В идеале я хотел бы иметь возможность обновлять thing1:

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

Я через документацию и имею в виду, может быть, что мне нужно сделать, это установить app.value, так:

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

Затем в функции submit задано значение 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

Определите услугу или ценность (как вы догадались). Это angular-ish способ сделать то, что вы желаете.

.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 
}) 
Смежные вопросы