gpt4 book ai didi

javascript - 从 Controller 以编程方式更改 ngModel 值

转载 作者:行者123 更新时间:2023-11-29 16:09:39 25 4
gpt4 key购买 nike

我想从我的 Controller 修改一个 ngModel 变量的值。但是,它似乎并未反射(reflect)在 View 中。我在 SO 上几乎没有看到其他问题,但没有一个对我有用。我想要一个不需要为此创建新指令的解决方案。我也曾尝试将更改包装在 $scope.$apply 中,但没有成功。

这里是 plunkr演示问题。

这里是plunkr的代码

JavaScript Controller :

    app.controller('MainCtrl', function($scope) {
$scope.Attachment = "something"
$scope.change = function () {
$scope.$apply(function() {
$scope.Attachment = "otherthing";
});
}

HTML:

<body ng-controller="MainCtrl">
<section class="content" ng-app="offer">
<div>
<button name="change" ng-click="change()" ng-model="Attachment">change</button>
<!-- <input name="Attachment" type="file" class="file_up" onchange="angular.element(this).scope().change(this)" ng-model="Attachment" /> -->
<span>{{Attachment}}</span>

</div>
</section>
</body>

最佳答案

绑定(bind)到对象属性而不是原始类型是最佳实践。
您正在绑定(bind)到一个原始类型且不可变的字符串。
您还应该删除 $apply,因为它不是必需的,因为您处于 angular 引擎盖下,因此它将自动执行 $apply

如果您将数据添加为对象的属性,您将不会再丢失引用:

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
//this has changed:
$scope.data = {
Attachment: "something"
}

$scope.change = function() {
//and $apply was removed from here
$scope.data.Attachment = "otherthing";
}
});

在 html 中你只需要改变:

<span>{{data.Attachment}}</span>

编辑:虽然其他一些答案是正确的,但我认为您应该了解什么是绑定(bind)的最佳实践。更新的plunker在这里。

关于javascript - 从 Controller 以编程方式更改 ngModel 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32227541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com