angular设置任何范围都可访问的变量

时间:2016-01-14 17:02:21

标签: angularjs

我正在使用Angular创建一个应用程序。应用程序中有一个表单供用户输入字符串。当用户输入字符串时,使用ng-submit:

调用函数
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,但这不起作用。

我不确定我该怎么做。有什么想法吗?

3 个答案:

答案 0 :(得分: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
})

答案 1 :(得分: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'服务中:

thing.setString($scope.valueIwantToSet)

或者使用以下方法从任何范围获取值:

$scope.variableIwantToUse = thing.getString();

答案 2 :(得分:-2)

就我不稳定而言,你需要创建类似全局变量的东西。尝试使用$rootScope。这是所有其他范围的父范围。您可以在任何控制器中注入和访问它,这样您就可以读/写您的值。这是一个例子。

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

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

您只需将$rootScope注入某个控制器,设置该值,然后将其注入另一个控制器,然后只读取该值。

希望这有帮助!