首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我在AngularJS中更改模型时,如何获得更新的视图?

当我在AngularJS中更改模型时,如何获得更新的视图?
EN

Stack Overflow用户
提问于 2016-01-05 00:16:38
回答 1查看 125关注 0票数 0

在对类似的问题做了大量研究之后,我提出了这个问题,在AngularJS应用程序中对模型做了修改之后,视图没有更新。由于我使用的是外部库angular-schema-form,情况有点复杂。

我有一个对象值变量附加到名为ediTradingPartner.outbound_uom_map的作用域上,angular-schema-form用于生成表单元素。一个例子如下:

代码语言:javascript
复制
$scope.ediTradingPartner.outbound_uom_map = {
  CHARGE: "EA", 
  DAY: "DA", 
  KIT: "KT", 
  MONTH: "MO",
  SET: "ST"
}

在加载表单时,上面的每个键值对都生成一个输入字段,其标签设置为键,文本值设置为该值。此外,我还添加了一个输入字段和一个按钮,允许用户向对象添加一个新的键值对。这样做的代码如下:

代码语言:javascript
复制
$scope.setupUomMapping = function() {
    var addNewUOMButton = $('<button>', { text: "+", 'ng-click': "addNewUOM(new_uom_key)"}),
        newUomKey = $('<input>', { type: "text", 'ng-model': "new_uom_key", placeholder: "New key..."}).css('margin-right', '5px');

    var $el = $('<div>', { id: "addNewUOM" })
        .append(newUomKey)
        .append(addNewUOMButton)
    .insertAfter($('legend:contains("outbound_uom_map")'));

    $compile($el)($scope);
}

当用户在输入字段中键入某些内容并按下按钮时,将调用方法addNewUOM,并将new_uom_key作为参数传入。addNewUOM的定义如下:

代码语言:javascript
复制
$scope.addNewUOM = function(new_uom_key) {
    if (!$scope.ediTradingPartnerModel.hasOwnProperty('outbound_uom_map')) {
        $scope.ediTradingPartnerModel.outbound_uom_map = {};
    }

    $scope.ediTradingPartnerModel.outbound_uom_map[new_uom_key] = "";
    console.log($scope.ediTradingPartnerModel.outbound_uom_map);
}

我想要做的是将新的键new_uom_key添加到范围变量$scope.ediTradingPartnerModel.outbound_uom_map中,以使视图具有另一个输入字段,标签是new_uom_key。作为模型已更改的证据,如果我在输入字段中输入“model”并按add按钮,然后记录$scope.ediTradingPartnerModel.outbound_uom_map变量,则得到以下值:

代码语言:javascript
复制
{
  CHARGE: "EA",
  DAY: "DA",
  KIT: "KT",
  MONTH: "MO",
  SET: "ST",
  YEAR: ""
}

当然,问题是视图不会因模型的变化而改变。

以下几点:

  1. 代码以前是工作的,当我没有对这两个函数进行任何更改时,它突然停止了工作。(显然,我在其他地方做了其他改变,破坏了这一功能)。
  2. 我试过使用$scope.$apply()$scope.$evalAsync(),但没有结果。前者导致了一个错误,即$scope.$apply()已经在运行,而第二个似乎并没有什么不同(尽管没有错误)。
  3. 我知道在setupUomMapping函数中动态插入元素不是“角度方式”,但我被迫这样做,因为包含所有这些内容的形式是由第三方库生成的,而我对这个库的控制是有限的。所以,如果答案集中在如何解决这个特殊问题上,我将不胜感激。

谢谢你的时间和帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-01-05 01:00:32

是否有一个$scope.ediTradingPartnerModel.outbound_uom_map绑定到的html对象?如果是的话,它应该自动更新。

否则,$scope.setupUomMapping函数是否负责构建视图?如果是的话,那是什么导致它着火的呢?如果只在DOM加载的情况下构建视图,那么视图就没有更新的理由。每次视图需要更新时,都需要调用此函数。

我的建议是:摆脱视图的过程构建,创建利用ng-重复的html模板。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34602253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档