Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Angular -将一个控制器用于跨多个HTTP请求的多个连贯视图

Angular -将一个控制器用于跨多个HTTP请求的多个连贯视图
EN

Stack Overflow用户
提问于 2013-12-01 12:44:58
回答 3查看 26.3K关注 0票数 12

我有一个简单的Angular JS场景。我在一个视图中显示了一个专家列表,该列表包含编辑专家的操作,这将在另一个视图中完成。这些视图来自服务器,并不在一个文件中。它们不会一起加载。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- experts.html -->
<div ng-controller='expertController'>
    <!-- showing the list of experts here -->
</div>

在服务器上的另一个文件中,我有:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- expert.html -->
<div ng-controller='expertController'>
    <!-- a form to edit/add an expert -->
</div>

我的控制器是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.controller('expertController', function ($scope) {
    $scope.getExperts = function () {
        _.get('/expert/getexperts/', null, function (data) {
            $scope.$apply(function () {
                $scope.experts = data;
            });
        });
    };

    $scope.editExpert = function (index) {
        _.get('/expert/getexpert/', { id: $scope.experts[index].Id }, function (data) {
                $scope.$apply(function () {
                    $scope.expert = data;
                });
         });
    };
});

但是,在编辑表单中不会显示任何数据。我使用Batarang检查了作用域,但不会显示expert对象。

问题似乎是我对两个(也可以是两个以上)视图使用一个控制器。但是,正如我在SO上读到的一些其他问题一样,最佳实践似乎是每个HTML视图都有一个控制器。

然而,我认为使用一个expertController来完成所有的CRUD操作,以及其他与expert相关的操作,会更加连贯和一致。我认为用expertEditController来编辑表单,用expertListController来显示列表超文本标记语言有点难看。

这里的最佳实践是什么?我怎样才能有一个连贯的、语义上命名的控制器,同时又能支持许多视图。到目前为止,在我所见过的任何MVC框架中,通过一个控制器支持多个视图都是例行公事。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-01 12:53:43

当然,您可以在同一个controller中使用多个views。例如:用于编辑和添加新项。

但您必须记住,每次加载视图时,控制器都会被初始化为,并注入新的$scope

在您的示例中,最好只使用两个单独的控制器(一个用于experts,另一个用于expert),并使用--可选的--一些服务在这些控制器之间进行通信,并可能提供一些缓存机制。

更新如果您想要在控制器之间提供一些公共/共享功能,最好的方法是创建并inject一个单独的服务。它使代码保持干燥。

票数 18
EN

Stack Overflow用户

发布于 2015-02-05 18:32:29

下面是一个示例项目(不是我创建的),它说明了如何使用具有两个视图的单个控制器:一个用于显示项目列表,另一个用于编辑或添加单个项目:http://embed.plnkr.co/jAK31F/

控制器中使用的基本原理是检查是否传递了单个项的id,并针对该情况运行适用的逻辑:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
controllers.controller('MainController', function( $scope, $location, $routeParams, ItemService)  {
  if ($routeParams.itemid) {
    // do stuff for single item
    if ($routeParams.itemid == 0) {
      // do stuff for adding item
    } else {
      // do stuff for editing item
    }
  } else {
    // do stuff for listing multiple items
  }
});

不同的视图在路由中的配置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.config(['$routeProvider', function ($routeProvider) {
        // routes
        $routeProvider.
        when('/', {
            templateUrl: 'item_list.html',
            controller: 'MainController'
        }).
        when('/:itemid', {
            templateUrl: 'item_single.html',
            controller: 'MainController'
        });
    }]);

因此,像baseurl/这样的url将打开列表视图,而像baseurl/1这样的url将打开id为1的项目的详细视图。

考虑到这是不是最佳实践,对于大多数情况,我不认为这种方法比使用两个控制器更有优势:一个用于列表,另一个用于单个项。根据我的经验,查看多个项目的控制器与编辑单个项目的控制器具有不同的关注点。任何共享逻辑都可以放在服务中,正如前面的答案所建议的那样。

票数 7
EN

Stack Overflow用户

发布于 2016-07-01 12:49:14

实际上,当我们对其他视图使用相同的控制器时,每当视图加载时,它都会重新加载该控制器。在那一刻,scope将失去它的data.To,避免这一点,我使用$rootScope而不是$scope。我不知道这种方法是否正确,但它是有效的。

$rootScope.expert而不是$scope.expert。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20312226

复制
相关文章
df 和 ls 命令执行夯主
其实他说第二点问题的时候我就已经猜到问题所在了,那不就是远程挂载的磁盘非正常的掉了,然后就会造成这个问题。但是他说 ISCSI 这个玩意的时候我不知道是啥,于是查了一下,有兴趣的同学可以看看这是:https://zhuanlan.zhihu.com/p/60986068,看的出来他是一个网络存储,那么就更加坚定我的想法了,开始指挥解决问题。
张琳兮
2020/05/25
2K0
df 和 ls 命令执行夯主
Linux进程控制【进程程序替换】
子进程 在被创建后,共享的是 父进程 的代码,如果想实现自己的逻辑就需要再额外编写代码,为了能让 子进程 执行其他任务,可以把当前 子进程 的程序替换为目标程序,此时需要用到 Linux 进程程序替换相关知识
北 海
2023/07/01
2590
Linux进程控制【进程程序替换】
Linux系统下进程编程之exec族函数解析(四)
fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换了。另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行脚本文件。
用户6280468
2022/03/18
1.4K0
Linux系统下进程编程之exec族函数解析(四)
awk中执行mv命令
我现在有一个thinkphp文件夹,我需要将文件夹下面所有的.class.php修改为.php
魔王卷子
2019/05/28
2K0
【Linux】进程的程序替换
红框中的代码实际上是父进程的代码,在没有执行fork之前代码就有了,在没有创建子进程之前,父进程的代码加载到内存了,子进程被创建出来是没有独立的代码,这个代码是父进程的代码,父进程通过if判断分流让子进程去跑了
lovevivi
2023/04/28
2K0
【Linux】进程的程序替换
exec族
这个一直没搞太明白,相识度高是一回事,不会用又是另一回事儿。 所以今天又温故了一遍:
看、未来
2020/08/26
1.1K0
srvctl start_执行命令ls>c
==禁止服务在某个实例上运行 srvctl disable service -d orcl -s servicename -i orcl1
全栈程序员站长
2022/10/01
6160
ctf中命令执行的绕过方法
在这之前,我们先来总结一下常用的命令注入绕过方法,还是挺有意思的,会对 Linux 指令更加熟练(下面有些 Linux 命令只在 bash 下有效,在 zsh 里面可能会不行)
棒棒鸡不棒
2022/09/01
2.4K0
温故Linux后端编程(二):进程
fork调用一次返回两次 父进程中返回子进程id (就是大于0的意思) 子进程返回0 读时共享写时复制,可保高效
看、未来
2021/09/18
7120
Mybatis中执行String类型的自己拼写的sql,不执行配置文件中的sql
Mybatis中执行String类型的自己拼写的sql,不执行配置文件中的sql
业余草
2019/01/21
1.4K0
Mybatis中执行String类型的自己拼写的sql,不执行配置文件中的sql
scrapy - Request 中的回调函数不执行or只执行一次
在 scrapy 中, scrapy.Request(url, headers=self.header, callback=self.parse) 调试的时候,发现回调函数 parse 没有被调
周小董
2019/03/25
2.6K0
python中执行shell命令的几个方
最近有个需求就是页面上执行shell命令,第一想到的就是os.system, 代码如下:
py3study
2020/01/06
3K0
关于docker中执行docker命令的实践
最近在制作给kubernetes jenkins plugin调用的jenkins slave(默认情况下,kubernetes jenkins插件使用的是jenkinsci/jnlp-slave)容器镜像,以供自动创建的pod使用。对这个镜像的需求是:希望在pod运行的容器内,执行docker命令,完成docker build, push等一些操作,即docker in docker。
全栈程序员站长
2022/08/27
9580
关于docker中执行docker命令的实践
npm是如何执行scripts中命令的?
过去一直有一个疑问,为什么我在命令行运行 npm start,可以正常启动 webpack,而直接使用 craco start 不行?
lonelydawn
2022/09/07
8380
npm是如何执行scripts中命令的?
linux系统编程之进程(三):exec系列函数和system函数
一、exec替换进程映象 在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建 了一个进程之后,通常将子进程替换成新
s1mba
2018/01/03
2.2K0
linux系统编程之进程(三):exec系列函数和system函数
Redis中除了EVAL和EVALSHA之外,其他可以执行Lua脚本的命令
这些命令以及EVAL和EVALSHA命令一起,可以方便地进行Lua脚本的加载、执行和管理。通过执行Lua脚本,可以实现更复杂和灵活的Redis操作。
一凡sir
2023/10/04
2470
Redis中除了EVAL和EVALSHA之外,其他可以执行Lua脚本的命令
Linux进程控制
在进程概念这篇文章中,我们浅浅地了解了一下fork函数,它的功能是让父进程去创建一个子进程,并且有两个返回值,对应着父进程的返回值和子进程的返回值。那么,为什么会这样?接下来我们好好地讨论一下fork函数。
二肥是只大懒蓝猫
2023/03/30
2.4K0
Linux进程控制
点击加载更多

相似问题

C execvp不会执行"ls -l“命令,但会执行"ls”

136

如何使用execvp实现ls -l命令?

19

未运行ls -l *.c的execvp命令

43

linuux - execvp :在执行ls命令时- get错误“ls: cannot access /etc :没有这样的文件或目录”

11

execvp不执行用户输入给出的命令

135
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文