我刚刚写了这个函数来回答SO:
function ngWrap($scope, fn) {
return function() {
var args = [].slice.call(arguments);
return $scope.$apply(function() {
fn.apply(null, args);
});
};
}
有更好的版本:
function ngWrap($scope, fn) {
return function() {
var args = [].slice.call(arguments);
if ($scope.$$phase) {
fn.apply(null, args);
} else {
return $scope.$apply(function() {
fn.apply(null, args);
});
}
};
}
可以用来缩短它:
socket.on('myevent', function(arg){$scope.$apply(function(){trigger_fn(arg)})})
成:
socket.on('myevent', ngWrap($scope, trigger_fn));
这个函数是否有一个名称(第一个)或者你可以使用下划线(只能使用$scope.$apply.bind($scope)
作为参数)编写它的简单版本,或者lisp有一个单词的函数吗?
答案 0 :(得分:1)
此功能是否具有名称
不是我知道,但我可以想到“将fn
提升到Angular $scope
”左右。
您可以使用下划线
编写它的简单版本
是的,你在那里做的是基本的功能组成,所以你可以使用下划线的compose
function:
function ngWrap($scope, fn) {
return _.compose($scope.$apply.bind($scope), fn);
}