JavaScript `bind` 方法未按预期工作

标签 javascript angularjs bind

以下 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/

相关文章:

javascript - 这种情况适合 $q 吗?

c++ - Wt connect函数,将参数传递给函数,该函数是连接函数参数

javascript - 如何提醒文本框的值

javascript - 如何从highstock图表中提取数据

javascript - 修改一个JS核心对象不好吗?

AngularJS注入(inject)器错误未捕获错误: [$injector:modulerr]

angularjs - Chrome 上的 POST 请求 "stall"

c++ - 返回 std::function 的类 std::bind 函数

javascript - 一旦函数绑定(bind)了 `bind` ,它的 `this` 就不能再修改了吗?

javascript - javascript中比较日期的问题