我看到了原始的angularjs代码,并且有很多像这样定义的函数
this.$get = function() {
return function ngParamSerializer(params) {
// some content...
};
}
我不知道为什么......以及为什么需要它。一个返回函数的函数?它不会返回内部函数的结果吗?
为什么不写?
this.$get = function() {
// some content...
}
示例:
this.$get = function() {
return function ngParamSerializer(params) {
return "Hello World"
};
}
与
不一样this.$get = function() {
return "Hello World"
}
当你调用它时,你不会得到“Hello World”。$ get()??
答案 0 :(得分:1)
从外观上看,您可能在提供商的代码中看到了这一点。
他们大多看起来像这样:
app.config(function ($provide) {
$provide.provider('globalsetting', function () {
this.$get = function () {
var appname = "Lawyer App";
return {
appName: appname
};
}
})
});
然后可以像这样使用:
app.controller("ProductController", function ($scope, globalsetting) {
$scope.name = globalsetting.appName;
});
的例子
现在想象一下这段代码有点复杂,您希望您的服务可以重复使用,但应用程序之间略有不同。像这样:
app.config(function ($provide) {
$provide.provider('globalsetting', function () {
this.$get = function (appAudience) {
var appname = appAudience + " App";
return {
appName: appname
};
}
})
});
但正如您在使用示例中所看到的,框架将调用$get
,而不是您,因此您无法直接向其传递参数。所以你可以做的一件事就是返回一个函数(可以有参数,不像$get
),而不是固定值:
app.config(function ($provide) {
$provide.provider('globalsetting', function () {
this.$get = function () {
return {
getAppName: function (appAudience) {
return appAudience + " App";
}
};
}
})
});
然后像这样使用它:
app.controller("ProductController", function ($scope, globalsetting) {
$scope.name = globalsetting.getAppName("Lawyer");
//$scope.name is now "Lawyer App"
});
看到你的示例代码返回带有params的函数,我猜你也是这个原因。但请注意,有more sophisticated ways for doing this。
答案 1 :(得分:0)
当您不调用内部函数时,它可能会有所帮助,但您想在此函数中提供一些参数。
我不知道你的示例中$get
函数是如何被angular使用的,所以我将从node.js express模块中提供一个示例。有中间件的概念。中间件是一个函数,它接受三个参数req
,res
,next
和调用next
函数,带/不带错误参数来停止/继续处理。中间件按照声明的顺序通过快递调用。
在下面的示例中,我想定义路由并添加身份验证逻辑以限制对资源的访问。如您所见auth
接受userRole
参数,并在快递调用middleware
时使用该参数:
app.get('/user/:id', auth('admin'), getUser);
let auth = function(userRole) {
return function(req, res, next) {
if (userRole === 'admin') {
return next();
}
return next(new Error('Auth error'));
};
}
答案 2 :(得分:0)
在javascript函数中是真正的公民。您可以将函数分配给变量。
var f = function (a, b) {
return a + b;
}
var f2 = f;
console.log (f(1,2)); // -> 3
console.log (f2(4,5)); // -> 9
第一个例子的意义是返回一个将由调用者调用的函数。这是一种回调
在您的情况下,您可以向$ get询问一个函数,稍后您可以使用参数调用
var n = this.$get();
for (var i = 0; i < 1000; i ++) {
...
n(i, i*i); // call function, e.g. notify others.
...
}
直接返回n的结果显然不相同,因为这不允许传递参数。