如何提升对象定义?
How can I hoist an object definition?
在我正在构建的 Angular 应用程序中的 js
文件中,我想在顶部声明 controller
s、service
s 等,然后定义他们在下面。
我现在有这个工作,很好。问题是,当我开始一个新文件时,我通常会复制现有文件的内容并更改函数的名称。但是,我必须经历一大堆函数名称,这很痛苦。我宁愿简单地更改包含这些函数的对象的名称,然后只更改
oldapp.controller
到
newapp.controller
为了更好地说明,这是我现在的
var pos__filejs_HomeApp = angular.module('ros.filejs.HomeApp', ['ui.router']);
pos_filejs_config.$inject = ['$stateProvider', '$urlRouterProvider'];
pos__filejs_HomeApp.config(pos_filejs_config);
pos_filejs_controller.$inject = ['$scope'];
pos__filejs_HomeApp.controller('ros.postjs.ctrl', pos_filejs_controller);
//----------------------------------------------------
// FUNCTIONS
//----------------------------------------------------
function pos_filejs_config($stateProvider, $urlRouterProvider){
// implementation
}
function pos_filejs_controller($scope){
//implementation
}
这是我想要的:
var pos__filejs_HomeApp = angular.module('ros.filejs.HomeApp', ['ui.router']);
HomeApp.config.$inject = ['$stateProvider', '$urlRouterProvider'];
pos__filejs_HomeApp.config(HomeApp.config);
HomeApp.controller.$inject = ['$scope'];
pos__filejs_HomeApp.controller('ros.postjs.ctrl', HomeApp.controller);
//----------------------------------------------------
// FUNCTIONS
//----------------------------------------------------
var HomeApp = {
config: function ($stateProvider, $urlRouterProvider){
// implementation
},
controller: function ($scope){
//implementation
}
}
这更干净了,尤其是当文件变得越来越大并且添加了更多的服务和配置时。
问题是,我似乎无法将对象实现放在 angular 下方,因为对象不是 "hoisted" - 即对 HomeApp
的引用文件的顶部是 undefined
,因为 HomeApp
仅在下方定义(function name(){...}
不是这样。
如何提升对象以便在文件的更高位置使用它?
HomeApp 已提升,但 HomeApp 已提升为 "undefined"。提升不会为您定义价值。根据我的说法,您可以将代码视为
var HomeApp = undefined;
var pos__filejs_HomeApp = angular.module('ros.filejs.HomeApp', ['ui.router']);
HomeApp.config.$inject = ['$stateProvider', '$urlRouterProvider'];
//Here HomeApp is undefined, Since you haven't assign any value;
pos__filejs_HomeApp.config(HomeApp.config);
HomeApp.controller.$inject = ['$scope'];
pos__filejs_HomeApp.controller('ros.postjs.ctrl', HomeApp.controller);
//...
I am not sure why you wanna to write a code which is hard to
understand :-D
在我正在构建的 Angular 应用程序中的 js
文件中,我想在顶部声明 controller
s、service
s 等,然后定义他们在下面。
我现在有这个工作,很好。问题是,当我开始一个新文件时,我通常会复制现有文件的内容并更改函数的名称。但是,我必须经历一大堆函数名称,这很痛苦。我宁愿简单地更改包含这些函数的对象的名称,然后只更改
oldapp.controller
到
newapp.controller
为了更好地说明,这是我现在的
var pos__filejs_HomeApp = angular.module('ros.filejs.HomeApp', ['ui.router']);
pos_filejs_config.$inject = ['$stateProvider', '$urlRouterProvider'];
pos__filejs_HomeApp.config(pos_filejs_config);
pos_filejs_controller.$inject = ['$scope'];
pos__filejs_HomeApp.controller('ros.postjs.ctrl', pos_filejs_controller);
//----------------------------------------------------
// FUNCTIONS
//----------------------------------------------------
function pos_filejs_config($stateProvider, $urlRouterProvider){
// implementation
}
function pos_filejs_controller($scope){
//implementation
}
这是我想要的:
var pos__filejs_HomeApp = angular.module('ros.filejs.HomeApp', ['ui.router']);
HomeApp.config.$inject = ['$stateProvider', '$urlRouterProvider'];
pos__filejs_HomeApp.config(HomeApp.config);
HomeApp.controller.$inject = ['$scope'];
pos__filejs_HomeApp.controller('ros.postjs.ctrl', HomeApp.controller);
//----------------------------------------------------
// FUNCTIONS
//----------------------------------------------------
var HomeApp = {
config: function ($stateProvider, $urlRouterProvider){
// implementation
},
controller: function ($scope){
//implementation
}
}
这更干净了,尤其是当文件变得越来越大并且添加了更多的服务和配置时。
问题是,我似乎无法将对象实现放在 angular 下方,因为对象不是 "hoisted" - 即对 HomeApp
的引用文件的顶部是 undefined
,因为 HomeApp
仅在下方定义(function name(){...}
不是这样。
如何提升对象以便在文件的更高位置使用它?
HomeApp 已提升,但 HomeApp 已提升为 "undefined"。提升不会为您定义价值。根据我的说法,您可以将代码视为
var HomeApp = undefined;
var pos__filejs_HomeApp = angular.module('ros.filejs.HomeApp', ['ui.router']);
HomeApp.config.$inject = ['$stateProvider', '$urlRouterProvider'];
//Here HomeApp is undefined, Since you haven't assign any value;
pos__filejs_HomeApp.config(HomeApp.config);
HomeApp.controller.$inject = ['$scope'];
pos__filejs_HomeApp.controller('ros.postjs.ctrl', HomeApp.controller);
//...
I am not sure why you wanna to write a code which is hard to understand :-D