一尘不染

Angular-使用一个控制器处理多个HTTP请求中的许多一致视图

angularjs

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

<!-- experts.html -->
<div ng-controller='expertController'>
    <!-- showing the list of experts here -->
</div>

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

<!-- expert.html -->
<div ng-controller='expertController'>
    <!-- a form to edit/add an expert -->
</div>

我的控制器是:

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列表HTML
有点难看。

最佳做法是什么?我如何拥有一个连贯且在语义上命名的控制器,同时支持许多视图。在到目前为止所见的任何MVC框架中,通过一个控制器支持许多视图都是一种例行程序。


阅读 183

收藏
2020-07-04

共1个答案

一尘不染

当然,您可以将许多views相同的东西一起使用controller。例如:用于编辑和添加新项目。

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

在您的情况下,最好只使用两个单独的控制器(一个用于一个experts,一个用于expert),并使用(可选)一些服务在它们之间进行通信,并可能提供某种缓存机制。

更新 如果要在控制器之间提供某些通用/共享功能,最好的方法是创建然后创建inject单独的服务。它保持代码干燥。

2020-07-04