以下 Controller 可以正常工作。
app.controller('foo', ['$scope',function ($scope) {
$scope.delete = function(){
bar($scope);
}
}]);
我试图通过使用 bind
让它变得更干净一点:
app.controller('foo', ['$scope',function ($scope) {
$scope.delete = bar.bind(null, $scope);
}]);
不幸的是,这种形式没有按预期工作,并且 $scope
总是在绑定(bind)方法(bar
)中提供旧版本的 $scope,即使在 $范围已更改为引用不同的值。有什么问题吗?
还有什么?
如果我不应该在这里使用 bind
,还有什么选择呢?
最佳答案
我假设你的问题是你绑定(bind)的 Util.bar
总是与旧版本的 $scope
一起提供,即使在 $scope
已更改为引用不同的值。
bind
绑定(bind)值,而不是变量。您正在将 $scope
的当前值绑定(bind)到 Util.bar
。另一方面,每次函数运行时,您的第一个样式都会强制将标识符 $scope
解析为一个值(或者,实际上,外部范围变量记录)。
如果 $scope
更改为引用一个完全不同的值,则必须使用第一种形式。 .bind(null, $scope)
将立即将 $scope
解析为一个值并永远使用该值,而没有 bind
的第一种形式将每次函数运行时将 $scope
解析为一个值。
关于JavaScript `bind` 方法未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30731635/