javascript tutorial中文 AngularJS-從控制器獲取模塊常量




node js angularjs教學 (4)

還應該注意,SimplGy的解決方案意味著'cfg'對像是一個常量,但該對象的屬性不是。 這意味著,你不能像這樣重新分配'cfg':

cfg = { randomProperty: randomValue };

您可以重新分配'cfg'對象的屬性,如下所示:

cfg.url = 'BrandNewURL.com';
cfg.httpTimeout = 30;

我正在嘗試構建一個myApp.config模塊來存儲我的應用程序的一些設置,我寫了一個config.js文件:

angular.module('myApp.config', [])
    .constant('APP_NAME','My Angular App!')
    .constant('APP_VERSION','0.3');

我把它添加到我的app.js(angular-seed):

angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'myApp.controllers', 'myApp.config']).

我將它添加到index.html文件中,現在我想弄清楚如何在我的控制器中獲取它,我試過:

angular.module('myApp.controllers', ['myApp.config'])
  .controller('ListCtrl', ['$scope', 'myApp.config', function($scope, $config) {
    $scope.printme = $config;
  }])

但我得到了:

未知提供者:myApp.configProvider < - myApp.config

我可能在這裡做錯了什麼,有什麼想法嗎?


我認為最簡單的方法是使用對象文字添加常量。 這符合我認為的大多數應用程序配置用例,因為它支持複雜的配置對象。 在其他提供商註冊之前constant步驟也會提前運行。

angular.module('myApp').constant('cfg', {
  url: 'https://myapi.com/v1/',
  httpTimeout: 5000
})

要使用它,你只需注入cfg

angular.module('myApp').factory('user', function(cfg, $http){
  // cfg and $http together at last
})

我不認為在這樣的注射中使用模塊名稱是有效的。 您可以簡單地按名稱注入常量:

angular.module('myApp.controllers', ['myApp.config'])
  .controller('ListCtrl', ['$scope', 'APP_NAME', function($scope, appName) {
     $scope.printme = appName;
}]);

檢查此示例中常量的使用:

angular
.module('abp001App', ['ngRoute'])
.constant("myConfig", {
    "url": "http://localhost",
    "port": "80"
})
.config(function ($routeProvider) {
    $routeProvider
        .when('/', {
            templateUrl: 'views/main.html',
            controller: 'MainCtrl'
        })
        .otherwise({
            redirectTo: '/'
        });
})
.controller('MainCtrl', function (myConfig) {
    // Do something with myConfig...
});

請參閱有關angularJs常量良好實踐的完整文章







angularjs