Angular.JS:视图共享相同的控制器,模型数据在更改视图时重置

我正在开始使用Angular.JS。

我有一些共享相同的控制器的意见。 每个视图都是收集存储在控制器中的数据的一个步骤:

$routeProvider.when('/', { templateUrl: 'partials/text.html', controller: 'itemSubmitter' }); $routeProvider.when('/nextThing', { templateUrl: 'partials/nextthing.html', controller: 'itemSubmitter' }); 

itemSubmitter控制器:

 $scope.newitem = { text: null } 

这是第一个观点:

 <textarea ng-model="newitem.text" placeholder="Enter some text"></textarea> <p>Your text is: {{ newitem.text }}</p> 

这个工作,现场更新'你的文字是:'段落。

但是,当下一个视图被加载时, {{ newitem.text }}被重置为默认值。 我如何使存储在控制器实例中的值在视图间持久存在?

控制器在改变路线时被处置。 这是很好的行为,因为您不应该依赖控制器在视图之间传输数据。 最好创build一个服务来处理这些数据。

请参阅有关如何正确使用控制器的angular度文档。 http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller

引用文件:

正确使用控制器

一般来说,pipe制员不应该试图做太多。 它应该只包含单个视图所需的业务逻辑。

保持控制器精简的最常见方法是将不属于控制器的工作封装到服务中,然后通过dependency injection在控制器中使用这些服务。 这在本指南的dependency injection服务部分进行了讨论。

不要使用控制器:

  • 任何types的DOM操作 – 控制器应该只包含业务逻辑。 DOM操作 – 应用程序的表示逻辑 – 因难以testing而众所周知。 将任何表示逻辑放入控制器中会显着影响业务逻辑的可testing性。 Angular提供自动DOM操作的数据绑定。 如果您必须执行自己的手动DOM操作,请将指令中的表示逻辑封装在指令中。
  • input格式 – 使用angular度表单控件。
  • 输出过滤 – 改用angular度filter。
  • 运行跨控制器共享的无状态或有状态代码 – 使用angular度服务。
  • 实例化或pipe理其他组件的生命周期(例如,创build服务实例)。