【问题标题】:angularjs module, which name to use? and why?angularjs 模块,使用哪个名称?为什么?
【发布时间】:2016-04-10 05:18:35
【问题描述】:

我对下面的代码有两个问题:我刚学angularjs,发现它很混乱:

  1. factory.quote 和 QuoteFactory。为什么我不能在控制器中使用 factory.quote 名称?
  2. 为什么我不能像 angular.module('factory.quote',[]).factory( 'QuoteFactory', ['ngResource','$resource', function ($resource)

    (function () {
    'use strict';
    angular.module('app', [
    // Angular modules 
    'ngRoute',
    'controller.quote',
    // Custom modules 
    'factory.quote'
    
    
    // 3rd Party Modules
    
    ]);
    
    angular.module('controller.quote', []).controller('QuoteController', ['$scope', 'QuoteFactory', function ($scope, QuoteFactory) {
    $scope.quote = QuoteFactory.query();
     }]);
    
    /*angular.module('controller.quote', []).controller('QuoteController', ['$scope', 'factory.quote', function ($scope, factory.quote) {
    $scope.quote = factory.quote.query();
    }]);*/
    
    angular.module('factory.quote',['ngResource']).factory('QuoteFactory', ['$resource', function ($resource) {
    return $resource('/api/quote', {}, {
        query: { method:'GET',param: {},isArray:true}
    });
     }])
      })();
    

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    通常,从大中型到大尺寸的网络应用程序的角度范式都是这样的

    我们有一个单独的文件夹,用于控制器、服务/工厂、指令、常量、过滤器等...

    实际上,当我们创建任何模块时 angular.module('your-module-name',['dependent modules']);

    所以在创建控制器时,

    我们说 your-module-name.controller('your-controller-name',['dependent factory/service modules'])
    以便控制器充当客户端逻辑实现(r)并与工厂函数具有的服务进行通信 http 调用服务器端代码

    所以在你的情况下 factory.quote 和 QuoteFactory。为什么我不能在控制器中使用 factory.quote 名称?

    正如我在上面的帖子中所讨论的,

    通常我们与服务/工厂函数通信,这些函数又通过 http 调用或任何其他协议与服务器端代码通信 所以我们需要工厂/服务模块来帮助我们完成它们的功能,以便我们可以与服务器端代码进行通信

    希望这很清楚

    然后回答你的第二个问题

    ngResource 是模块的名称,它提供可以与其名称一起使用的服务/功能 但要使用 ngResource(它是一个模块)的功能 我们需要在我们的主模块中导入它

    这就是为什么我们把它放在 [] 中,即我们的 Angular 模块的依赖列表

    谢谢

    【讨论】:

      【解决方案2】:

      在上面的代码中,您正在为controllersfactory 创建单独的模块。

      1) 为什么我不能在控制器中使用 factory.quote 名称?

      factory.quote 是您的模块名称,它包含任意数量的控制器和工厂。在此控制器中,您仅在其名称为 QuoteFactory 的代码中创建了一个工厂。您将在控制器而不是模块中使用该工厂。所以,你不能在这里使用你的模块名称,你必须使用模块内部的工厂名称factory.quote

      2) 为什么我不能像 angular.module('factory.quote',[]).factory('ngResource' ,'QuoteFactory', ['$resource',函数($resource)

      angular.module('factory.quote',[]).factory('ngResource' ,'QuoteFactory', ['$resource', function ($resource) - 你在这里做什么?您是否要创建名称为ngResource 的工厂?这段代码完全令人困惑。

      【讨论】:

        【解决方案3】:

        1.) factory.quote 和 QuoteFactory。为什么我不能在控制器中使用 factory.quote 名称?

        • 'factory.quote' : 是一个模块名称。用法是当您有另一个模块(例如'app')想要使用'factory.qoute' 中可用的内容时
        // Here you are telling 'app' to load module 'factory.qoute'
        angular.module('app', ['factory.qoute'])
        
        • 'QuoteFactory' 是一个工厂名称,可在内部 'factory.qoute' 模块中使用。
        // Here you are telling 'app' to load module 'factory.qoute'
        angular.module('app', ['factory.qoute'])
        // Here you are using 'QuoteFactory' which is the content of 'factory.qoute'. 
        .controller('QuoteController', ['$scope', 'QuoteFactory', function ($scope, QuoteFactory) {
            $scope.quote = QuoteFactory.query();
        }]);
        

        => 实际上 'factory.qoute' 和 'QuoteFactory' 是两个不同事物的名称。这就像一台名为factory.qoute 的机器有一个名为QuoteFactory 的机制。

        就像你有一个键盘。当您想使用[Enter] 按钮时。您不会将[Enter] 按钮插入您的PC。但是您需要将整个键盘插入 PC。

        2.) 为什么我不能像 angular.module('factory.quote',[]).factory('ngResource' ,'QuoteFactory', ['$resource', function ( $资源)

        第一个问题的类似答案。 'ngResource' 是一个模块,你不要在机制层使用它。

        就像:您没有将键盘插入显示器,而是插入 PC。

        【讨论】:

        • 我想我明白了,首先创建一个模块然后创建服务/控制器。要使用它,您必须加载模块然后使用服务。
        猜你喜欢
        • 2014-10-16
        • 1970-01-01
        • 2018-10-29
        • 1970-01-01
        • 2017-06-29
        • 1970-01-01
        • 2013-12-03
        • 2017-12-04
        • 1970-01-01
        相关资源
        最近更新 更多