onchange 不会改变 AngularJS 视图中的 $scope

Posted

技术标签:

【中文标题】onchange 不会改变 AngularJS 视图中的 $scope【英文标题】:onchange would not change $scope in AngularJS view 【发布时间】:2016-07-13 00:07:40 【问题描述】:

我有以下代码(见下文)。当我单击按钮并选择文件时,视图中的 data.myVar 保持不变。 (不知何故,我确实看到$scope.data.myVar 在单步执行控制器时会正确更新)。为什么会这样?

html摘录(它在下面的控制器下):

data.myVar

<input type="file" onchange="angular.element(this).scope().setRuleFile(this)" />

JS:

angular.module('myModule')
    .controller('MyCtrl', ['$scope', function ($scope) 

    $scope.data = 
        myVar: 'init'
    ;

    $scope.setRuleFile = function(element) 
        $scope.data.myVar = 'changed';
    

]);

【问题讨论】:

嗯,它应该可以工作.. 控制台中的任何错误?您可以提供一个简单的演示来重现这一点。 事件在 Angular 上下文之外,所以你需要告诉 Angular 来运行摘要 使用$scope.$apply() angular 不知道onchange ...因此,如果您修改范围使用$apply,因此angular 知道运行摘要.. 尝试$scope.data.myVar = 'changed';$scope.$apply() @charlietfl,是正确的。检查它:plnkr.co/edit/Qv8cDpUPD5OL1VXTRpKX?p=preview 【参考方案1】:

使用指令代替它不那么笨拙。这是一个类似的问题: AngularJs: How to check for changes in file input fields?

【讨论】:

虽然我发现 Angular 不允许我将指令中的元素传递到我在范围内定义的回调中:不允许在 Angular 表达式中引用 DOM 节点!表达式:- 所以它对我不起作用。

以上是关于onchange 不会改变 AngularJS 视图中的 $scope的主要内容,如果未能解决你的问题,请参考以下文章

input输入框的oninput和onchange事件

当状态改变时,对文本字段做出反应 onChange 更新整个组件

Angularjs:用户点击回车时的Onchange事件

<select>控件中,选中第一个值是不会触发onchange事件的,如何使选中第一值可以触发事件呢?

AngularJS材质暗模式开关不会改变背景

下拉列表不会根据范围值angularjs进行更新