2016-02-02 51 views
0

我正在使用Ionic制作移动应用程序。我将“蓝色”存储为初始值。现在我想改变服务中的价值。更改Service.js中的var值

.factory('repository', function() { 
     var theme="button-calm"; 
     setTheme: function(input){ 
     theme=input; 
     }, 
     getTheme: function(){ 
     return theme; 
    } 

但我不知道为什么主题不能改变。

+0

尝试删除var,看看是否有帮助。 – Aetricity

+0

你用什么来改变它? – Gavriel

+0

@Aetricity,那么它就成为一个全局变量,这不是一个好的解决方案 – Gavriel

回答

0

尝试使用此服务,而不是:

(function(){ 

service('repositoryService', function(){ 
    var service = { 

     theme : "button-calm"; 

     getTheme : function(){ 
      return this.theme; 
     }, 

     setTheme : function(input){ 
      this.theme = input; 
     } 
    }; 

    return service; 
}); 

})(); 

显然,你需要在你的控制器引用repositoryService,就像你需要参考repository

3

您工厂的语法似乎是有点过了,请确保您的工厂返回一个JavaScript对象:

app.factory('repository', function() { 
    var theme="button-calm"; 
    return { 
    setTheme: function(input){ 
     theme = input; 
    }, 
    getTheme: function(){ 
     return theme; 
    } 
    } 
}); 

在控制器旁注入出厂到控制器中

app.controller('SomeController', ['repository', function(repository) { 
... 

你然后可以设置/获得主题:

repository.getTheme(); 
repository.setTheme('changed value'); 

查看此plnkr for working exa mple:http://plnkr.co/edit/T6OoL10QzCK6hoX1HZc8?p=preview

+0

我正要发布我的答案,然后我看到了你的答案。完全一样的想法,所以我不会再发布。但是请看看这个蹦床,因为我多放一点来演示这个工厂:https://plnkr.co/edit/AXs6vnI7SdcB0S2KA3R3?p=preview –

+0

Thx为答案。我做了所有的步骤,它的工作原理。有一件事是,当我想调用函数setTheme()。我不能做到以下几点:repository.setTheme(color); 和颜色是var颜色,我也尝试颜色是$ scope.color。 那么我必须传递像“value”这样的参数吗?我无法传递一个变量? –