2015-01-17 22 views
0

我有一个angularjs的问题。 2有2次:“更改”angularjs - 如何在路由时保持当前视图数据

  1. 查看1具有这些控件
    • 名为txtBox1与缺省值为空白文本框
    • 名为“变化”在txtBox1改变文本的按钮来
  2. 查看2
    • 命名txtBox2

首先一个文本框,我浏览到视图1,点击该按钮,txtBox1的内容更改为 “改变了!”。然后我导航到View2,之后,我回到View1。

那么我怎么能保持从View1输入到txtBox1的数据呢? 我已经使用DurandalJs,他们有浏览缓存选项,以保持导航时查看当前数据,但我不知道如何处理angularjs?

enter image description here

+0

一些简单的代码可以帮助,但基本的想法是,你应该创建一个使用两个控制器对DataService和存储在视图1.价值这也将使如果需要视图2访问它。如果不需要,view2不需要引用该服务,因为它将由应用程序实例化并保持实例化,直到应用程序关闭。 – Beartums

+0

你可以发布你的代码吗? – Ved

回答

0

@jimmy NG:你想对你的数据,甚至刷新后储存在哪里?这一点很重要。

如果你只是想那些值有当前的应用程序运行,假设你有1个CTRL每个主要观点,那么你可以将经由助手服务类(数据管理服务)的表单数据:

myapp.service('viewDataManager', [function() { 
    var data = {}; 
    // TODO: optionally via HTML5 getter/setter way 
    return { 
    get: function (key) { return data[key]; }, 
    set: function (key, newData) { data[key] = newData; } 
    }; 
}]); 

然后,在破坏view1Controller你只需设置你的表单数据:

$scope.$on('$destroy', function() { 
    view1DataManager.set('view1FormData', $scope.myModel.formStates); 
}); 

同样,在初始化/构造,重新加载这些状态:

$scope.init = function() { 
    $scope.myModel.formStates = view1DataManager.get('view1FormData'); 
}; 

这是为了让数据保持当前运行的应用程序。对于未来的实例,只需更新数据管理器将其设置为localStorage或websql甚至cookie即可(但不是太推荐)。

注意:您也可以在$ rootScope中存储几乎所有内容,但是从任何方式来看,它都是硬核(架构,性能等)。所以绝对是一个“不要去那里”的事情。

UPDATE: @jimmyng:这是基本不可能的状态存储在对象(又名CTRL),因为对象正在被丢弃和需求再次被实例化(当然)。

假设你所有的UI易失性数据存储在“formStates”中,上面的代码将处理你所需要的。您正在使用AngularJS,所以小部件将绑定到ng-model。你也可以在那里放置选项等选项。

// E.g.: 
dropdownlist ---> ng-model -> formStates.selectedXXX 
dropdownlist ---> ng-options-> formStates.xxxOptions 
textbox ---> ng-model -> formStates.name 
etc 
+0

嗯,实际上我不想将表单数据存储在变量中。我想让我目前的控制状态在我导航到其他视图时不会改变。你可以想象在视图1中你已经完成了这些操作:选择一个下拉列表,输入一个文本框。然后,导航到视图2以检查一些变量,然后返回视图1以继续当前的工作。但一切都消失了,视图1被刷新了。 –

+0

@jimmyng:检查已更新的答案 –

相关问题