角度存储值,以便在多个页面上进行访问

时间:2015-04-17 13:35:59

标签: javascript angularjs angularjs-service angularjs-factory

解决方案:在我更新变量'之前,我的.get()函数似乎已被调用。因此它没有显示更新的变量。

当我在真实页面上测试它时,它就像一个魅力:)

最终FIDDLE

注意:我确实添加了返回set函数以立即更新视图。


更新:让我的工厂工作正常,但无法获得绑定到工厂.set()函数的值。 FIDDLE


我正在构建一个安装USB网络连接器的手册,需要存储一些变量以在多个页面中显示正确的内容(在同一控制器中很难)。

在做了一些研究之后,似乎有了“服务”和“服务”。是这样做的正确方法,但是我无法让它们发挥作用。

当我将功能放入控制器本身但它被重置为' []'当我改变页面时再次。

控制器内的

功能正如我现在所说:

$scope.isActiveSystem = [];

$scope.activeSystem = function(name) {
    $scope.isActiveSystem = name.value;
}

有人能指出我正确的方向如何把它放在服务中或给我一个学习的例子,这样我就可以更好地理解发生了什么?

另外,我应该将数据存储在工厂还是某些服务中?

我尝试提供服务:FIDDLE

2 个答案:

答案 0 :(得分:3)

你离解决方案不远。

说真的,我曾经试着记住服务和工厂之间的区别。最后,两者都可以完全以相同的方式使用,以满足相同的要求。

app.factory('dmFactory', function() {
//name.value should equal to system.value from the controller 
var somethingIWantToRemember = {};
return {
   set: set,
   get: get
}

function get(key){      //You can forget about the key if you want
    return somethingIWantToRemember[key];
}

function set(key, value){
    somethingIWantToRemember[key] = value;
}

});

并且在你的控制器中,你只需要以这种方式调用这两个函数:

$scope.something = dmFactory.get(key);

dmFactory.set(key, $scope.something);

答案 1 :(得分:2)

从您的控制器,如果您在页面加载时重置它,您的数据重置是正常的。

你需要: - 将您的服务注入您的控制器

app.controller('myCtrl',['myService',function(myService){
  
  }]);

  • 从您的服务创建一个get函数以检索变量的值

factory.getVal = function(){
  return val;  
};

  • 在控制器启动时调用get函数

$scope.isActiveSystem = myService.getVal();