Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角形js魔术弦_Javascript_Angularjs - Fatal编程技术网

Javascript 角形js魔术弦

Javascript 角形js魔术弦,javascript,angularjs,Javascript,Angularjs,在angularJs中,去除魔法弦的最佳方法是什么 比如说, //app.js angular.module('starter', ['ionic', 'starter.controllers', 'starter.services']) //accountController.js angular.module('starter.controllers') .controller('AccountCtrl', function($scope) { }

在angularJs中,去除魔法弦的最佳方法是什么

比如说,

//app.js
angular.module('starter', ['ionic', 'starter.controllers', 'starter.services'])

//accountController.js
angular.module('starter.controllers')
    .controller('AccountCtrl',
        function($scope) {

        }
    );

angular.module('starter')
    .config(function config($stateProvider, $urlRouterProvider) {
        $stateProvider.state($area.state, {
            url: '/account',
            views: {
                'tab-account': {
                    templateUrl: 'templates/tab-account.html',
                    controller: 'AccountCtrl'
                }
            }
        });
我正在考虑改变,这样

//constants.js
var MODULE_STARTER = function(){return 'starter';};
var MODULE_CONTROLLERS = function(){return 'starter.controllers';};
var MODULE_SERVICES = function(){return 'starter.services';};

//app.js    
angular.module(MODULE_STARTER(), ['ionic', MODULE_CONTROLLERS(), MODULE_SERVICES()])
angular.module(MODULE_CONTROLLERS, []);

//accountController.js
var ACCOUNT_CONTROLLER = function() {
    var $area = {};

    $area.url = '/account';
    $area.state = 'tab.account';
    $area.controllerName = "AccountCtrl";

    $area.stateConfig = function config($stateProvider, $urlRouterProvider) {
        $stateProvider.state($area.state, {
            url: $area.url,
            views: {
                'tab-account': {
                    templateUrl: 'templates/tab-account.html',
                    controller: $area.controllerName
                }
            }
        });
    };

    return $area;
};

angular.module(MODULE_STARTER())
    .config(ACCOUNT_CONTROLLER().stateConfig);

angular.module(MODULE_CONTROLLERS())
    .controller(ACCOUNT_CONTROLLER().controllerName,
        function($scope) {

        }
    );
所以关键是,当我引用相同的字符串值时,我不必重复神奇的字符串,重构也会更容易

此外,如果我想引用account controller或其URL进行重定向,我总是可以从account\u controller获取数据


这种方法有什么缺点吗?

1)这些不是真正的神奇字符串,比如说,而是代码模块的名称……不应该做太多更改。2) 如果您确实希望引用它们以允许(比如)对模块名称进行单数编辑,为什么要将其设置为函数?这是额外的开销和打字。只需将字符串设置为一个变量并使用它。一切都会根据我的经验发生变化,尤其是在重构时,比如说如果应用程序增长,我需要添加另一个帐户控制器,那么我可能会将其重命名为User.AccountCtrl,并且我可能会为客户端添加一个名为client.AccountCtrl的新帐户控制器。我同意你对第二个问题的看法,但是有没有比定义全局变量更好的方法呢?如果你非常担心模块名称的变化,那么你很可能就是OCD类型的人,他们会不断地改变你在这个新系统中的组织,导致更多或更多的搜索和替换来改变变量/常量名称。我并不是说要冒犯你,我只是不认为你用这一点我认为过于工程化的东西节省了你的工作。:)好吧,我无意冒犯你,但我不认为强迫症是在一个系统进化时改变现有的名称,而不是为新的名称想出混乱的名称,这样旧的名称就不必改变,我认为我们在这方面陷入僵局。