gpt4 book ai didi

AngularJS Controller 和 "use strict"

转载 作者:行者123 更新时间:2023-12-03 09:42:29 24 4
gpt4 key购买 nike

我最近开始使用 JSHint,它要求我使用“use strict”的函数形式。从那时起,AngularJS 抛出一个错误:

“错误:参数 'webAddressController' 不是函数,未定义”

当我删除“使用严格”的功能形式时, Controller 加载正常。

Controller :

(function () {
"use strict";

function webAddressController($scope, $rootScope, web_address_service) {
// Do things
}

}());

有人对这里发生的事情有任何见解吗?

最佳答案

首先,我想说 pkozlowski 真的很了解他在 Angular 的工作,但这实际上并不是一个 Angular 问题,而是一个闭包问题。

Angular 在两个地方寻找 Controller :

  • 在自己的通过 Module.controller()
  • 注册的 Controller 注册表中
  • 在全局变量(或全局函数声明)中

  • 问题是“use strict”闭包中的所有内容都不是全局的。它在包含它的匿名函数中被封装和私有(private)化。
    (function() {
    // nothing in here is global or even public.
    // "use strict" or not.

    "use strict"; // this is mostly irrelevant.

    // this will not work, because it's wrapped and not global
    function ThisDoesntWork($scope) {
    };

    // window is the global root variable. So this works.
    window.ThisWorks = function($scope) {

    };

    // this will work, because it's explicitly registering the controller
    // presuming app is your Module variable from outside of the closure.
    app.controller('ThisIsBest', function($scope) {

    });

    })();

    //this works because it's global.
    function ThisAlsoWorks($scope) {

    }

    // if you declare a global var, then set it inside
    // of your closure, you're good to go too.
    var ThisWillWorkToo;

    (function {
    //here we're setting it again.
    ThisWillWorkToo = function($scope) {
    };
    })();


    // if you're really crazy you can even do this...
    var ThisWillWorkButItsWeird = (function() {
    "use strict";

    function ThisWillWorkButItsWeird($scope) {

    }

    return ThisWillWorkButItsWeird;
    })();

    归根结底,您可以将“use strict”放在任何函数中,或者如果您愿意,也可以放在文件级别。 “使用严格”本身并没有为您破坏任何东西。如您所见,有上千种注册 Controller 的方法。最好的选择可能是按照建议使用 .controller 方法显式注册它们。

    关于AngularJS Controller 和 "use strict",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957625/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com