【问题标题】:Angular $watch not updating UIAngular $watch 不更新 UI
【发布时间】:2016-04-18 07:17:59
【问题描述】:

我有一个 $watch,我正在更新我的模型。但是我的模型无法更新 UI 中的绑定控件。

这是更新模型的屏幕截图。

我的用户界面有这个

<form method="post" action="" role="form" class="form-horizontal form-group-sm">

    <table ng-controller="myController" class="table table-responsive table-striped">
        <tr>
            <td>
                <label for="moduleid" class="col-md-2">Module ID : </label>
                <div class="form-group  col-md-3">

                    <input type="text" id="moduleid" name="moduleid" ng-model="hdr.moduleid" value="" class="form-control">
                </div>
            </td>
        </tr>
        <tr>
            <td>
                <label for="modulename" class="col-md-2">Module Name : </label>
                <div class="form-group col-md-4">
                    <input type="text" id="modulename" name="modulename" ng-model="hdr.modulename" value="" class="form-control">
                </div>
            </td>
        </tr>
        <tr>
            <td>
                <label for="status" class="col-md-2">Status : </label>
                <div class="form-group col-md-4">

                    @Html.DropDownList("status", (List<SelectListItem>)ViewBag.StatusList, new { @class = "form-control ComboM required", @ng_model = "hdr.status", @style = "width: 240px" })
                    @Html.AntiForgeryToken()
                </div>
            </td>
        </tr>
    </table>
</form>

为什么无法更新我的 UI。

EDIT :也尝试了以下方法。还是没有运气。

   $scope.$watch("mySelectedItems[0]", function (newVal, oldVal) {
        var val;
        if (newVal != oldVal) {
            if (newVal == undefined && oldVal)
                $scope.hdr = oldVal;
            else $scope.hdr = newVal;
        }
        //    alert($scope.hdr.modulename);
    });

EDIT 2:在JS Fiddle 中工作,但在我的项目中没有。请看原文SO Question

【问题讨论】:

    标签: angularjs asp.net-mvc model-view-controller


    【解决方案1】:

    您的$scope.hdr 似乎是一个对象。对象在 JS 中是通过引用绑定的(就像数组一样)。您设置了您的 $scope.hdr = y 并导致破坏此引用。您的绑定不会因此而更新。根据您的对象内容,您可以尝试angular.extendangular.merge

    angular.extend($scope.hdr, y);
    

    文档:

    https://docs.angularjs.org/api/ng/function/angular.extend

    【讨论】:

    • 谢谢。但是检查一下这个 JS Fiddle 它在​​那里工作! jsfiddle.net/x5wt6m0w/4
    • @Deb:嗯,这是另一种解决方案 :) 您正在观看mySelectedItems[0],所以newVal 已经拥有正确的参考。然后,您通过val 将此引用应用于您的$scope.hdr 并导致更新。至少这就是我理解发生了什么的方式:)
    • y 也是一个对象,它是 mySelectedItems 集合的一部分。
    • 这也是我原来的问题stackoverflow.com/questions/36684772/…的转贴
    • 嗯...您是否尝试过不绑定 var x = $scope.mySelectedItems; 而是绑定 var x = newVal;(就像您在小提琴中所做的那样)?
    猜你喜欢
    • 1970-01-01
    • 2019-09-24
    • 2018-09-22
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    相关资源
    最近更新 更多