当前位置: 首页 > 面试题库 >

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

连德义
2023-03-14
问题内容

我开始使用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 }}将重置为其默认值。如何使存储在控制器实例中的值在视图之间持久化?


问题答案:

更改路线时会布置控制器。这是个好习惯,因为您不应该依赖控制器在视图之间传送数据。最好创建一个服务来处理该数据。

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

引用文档:

正确使用控制器

通常,控制器不应尝试做太多事情。它应仅包含单个视图所需的业务逻辑。

使控制器保持苗条的最常见方法是将不属于控制器的工作封装到服务中,然后通过依赖注入在控制器中使用这些服务。本指南的“依赖关系注入服务”部分对此进行了讨论。

请勿将控制器用于:

  • 任何类型的DOM操作-
    控制器应仅包含业务逻辑。众所周知,DOM操作(应用程序的表示逻辑)因难以测试而闻名。将任何表示逻辑放入控制器中都会严重影响业务逻辑的可测试性。Angular提供了用于自动DOM操作的数据绑定。如果必须执行自己的手动DOM操作,请将表示逻辑封装在指令中。
  • 输入格式-改用角度形式的控件。
  • 输出过滤-改用角度过滤器。
  • 要运行跨控制器共享的无状态代码或有状态代码,请使用角度服务。
  • 实例化或管理其他组件的生命周期(例如,创建服务实例)。



 类似资料:
  • CodeIgniter 的开发基于 MVC(模型-视图-控制器)设计模式。MVC 是一种 用于将应用程序的逻辑层和表现层分离出来的软件方法。在实践中,由于这种分离 所以你的页面中只包含很少的 PHP 脚本。 模型 代表你的数据结构。通常来说,模型类将包含帮助你对数据库进行增删改查的方法。 视图 是要展现给用户的信息。一个视图通常就是一个网页,但是在 CodeIgniter 中, 一个视图也可以是一

  • 我需要修改我的代码,使它成为一个模型-视图-控制器。因为我是一个完全的编程新手,如果我诚实的话,我会头疼。任何帮助如何做到这一点将不胜感激。 *在一个牧场上有200只忙碌的绵羊。这群羊由95只白羊、60只黑羊和45只白黑羊组成。牧羊人现在想把它们分开,这样相应的羊毛就可以按颜色剪了。帮他写一个小脚本,这样他就可以更好地点他的羊了。请使用变量、数组、数学运算符和函数实现前三点。提示:为了更好地概述,

  • 以下的一段代码相当于定义一个ParameterizableViewController视图控制器的快捷方式,该控制器会立即将一个请求转发(forwards)给一个视图。请确保仅在以下情景下才使用这个类:当控制器除了将视图渲染到响应中外不需要执行任何逻辑时。 以下是一个例子,展示了如何在MVC Java编程配置方式下将所有"/"请求直接转发给名字为"home"的视图: @Configuration

  • 问题内容: 我没有找到有关此问题的文章,但没有一个解决我的问题。 就像我说的那样。 ViewControllerA ViewControllerB 我试图将添加为的子视图,但是它 抛出类似“ ” 的错误。 下面是代码… ViewControllerA ViewControllerB只是一个带有标签的简单屏幕。 ViewControllerB EDIT 根据用户答案的​​建议解决方案,ViewCon

  • 我找到了一些关于这个问题的帖子,但是没有一个能解决我的问题。 说像我已经... ViewControlllerA ViewControlllerB 我试图将ViewControlllerB添加为ViewControlllerA中的子视图,但是,它抛出了一个错误,如""。 下面是代码。。。 视图控制器 ViewControllerB只是一个带有标签的简单屏幕。 视图控制器B 编辑

  • 问题内容: 我目前正在使用基于Web的Twitter客户端,因此我使用了angular.js,node.js和socket.io。我通过socket.io将新的推文推到我的客户端,服务在其中等待新的推文。当一条新的推文到来时,该服务通过$ broadcast发送事件。 在我的控制器中是一个事件侦听器,其中传入的tweet在单独的函数中进行处理。此功能只是将新的推文推入我的推文范围。 现在,我的问题