【问题标题】:Same Angular controller for different view不同视图的相同角度控制器
【发布时间】:2014-10-24 06:52:45
【问题描述】:

我需要列出、编辑和删除一个实体。我对每个操作都有不同的看法。我想知道为这些操作使用相同的 Angular 控制器是否是一个好习惯,这些操作适用于每个操作,或者每个操作是否应该有一个单独的控制器?

另外,如果对这些操作使用相同的控制器,是否可以在加载不同的视图时调用不同的函数?因此,当用户进入列表视图时,会在页面加载时调用列表方法,而当用户进入编辑视图时,会在加载编辑视图时调用控制器的编辑方法。我设法通过使用 ngInit 调用方法来实现这一点,但显然在 v1.2 中不建议这样做,并且只能与 ngRepeat 一起使用。

我的问题与此类似。 Angular - Using one controller for many coherent views across multiple HTTP requests

但是我也想知道是否有一种方法可以根据控制器使用的视图来调用同一控制器的不同初始化方法。

【问题讨论】:

    标签: angularjs ng-init


    【解决方案1】:

    更好的方法是编写一个可以跨控制器使用的实用服务。在您的不同控制器中使用此服务。

    您的服务将如下所示:

    (function() {
    'use strict';
    // this function is strict...
    
    angular
        .module('myapp.services', [])
        .service('Utility', function() {
            var Utility = {};
    
            Utility.edit = function(id, dataset) {
              //perform edit related task here 
            };
    
            Utility.delete = function(id, dataset) {
              //perform edit related task here 
            };
            return Utility;
        })
    }());
    

    【讨论】:

    • 我已经设置了服务,我的问题更多是关于使用相同的控制器进行不同的 CRUD 操作。
    • 在这种情况下,您将必须在主控制器中创建一个函数对象,您可以在 index.html 中定义它仍然我建议您使用服务,因为它易于理解和代码变得更加灵活。任何与业务相关的逻辑都应该与控制器分离:)
    【解决方案2】:

    我在这里得到了答案:Using same controller for all CRUD operations (Rails-alike)

    显然,为每个视图使用不同的控制器是一种好习惯,它不应该作为服务工作。这对于从 MVC/WebAPI 进入 Angular 的人来说是完全不同的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 2018-11-25
      相关资源
      最近更新 更多