【问题标题】:AngularJs pass model value + model name to function in controllerAngularJs 将模型值 + 模型名称传递给控制器​​中的函数
【发布时间】:2018-03-15 10:56:35
【问题描述】:
$scope.populateMap=[{name: "ABC", code: "123"}, {name: "XYZ", code: "345"}]

//要发送模型名称+模型值当前发送ngObject.MainObj.specificFormatObj

HTML

<select ng-model="ngObject.MainObj.specificFormatObj" ng-change="ngObject.MainObj.specificFormatObj">
    <option></option>
    <option ng-repeat="i in populateMap" value="{{i}}">{{i.name}}</option>

JS

// CONTROLLER CODE JSON parse object to get name and code GOT parsedObj
$scope.genericSetLookups=function (Obj) {  // want to do something like get the ngmodel string + the value, currently only value comes in
    Obj.code=parsedObj.code;
    Obj.name=parsedObj.name
};

更多解释:ngObject.MainObj.specificFormatObj

  • 我希望在我的模型中以特定方式存储查找值,包括名称和代码。在我使用 ng-repeat 填充的 UI 上,因此当我选择特定值时,我可以将 i.name 作为显示并将值设置为 i.code 。
  • 但如果我这样做,我的 ngObject.MainObj.specificFormatObj.name 将为 null,并且值将通过使用 ng-model 设置为 ngObject.MainObj.specificFormatObj.code,所以这就是我采用值的原因,而不是 i.code 或 i.value ,现在在地图中我有代码和名称对。
  • 我将它发送到一个函数并解析它,并将值分别设置为 ngObject.MainObj.specificFormatObj.code=inputTofunc.code 作为名称。在这种情况下,在 ng-change 中我传递 ngObject.MainObj.specificFormatObj.code ,而是我想将地图中的 i 设置为 ngObject.MainObj.specificFormatObj 将其发送到函数中,模型字符串在这种情况下为“ ngObject.MainObj.specificFormatObj”。
  • 所以对于 10 次查找,我可以编写一个通用代码,其中模型名称和模型值我可以作为参数发送到函数并将其设置在那里,上述方法可能是我想要设置为模型的硬编码值特定格式。

【问题讨论】:

  • 你想做什么显然是无法理解的。你的问题很糟糕。您能否尝试创建一个完整的示例来说明您正在尝试什么以及您想要实现什么?
  • 好的,让我再解释一下,在 ng-change 中我可以将模型的值 + 模型的名称作为字符串传递,以便我可以使用该模型名称并设置值。因此,每次我调用 genericSetLookups 函数时,模型的名称都会改变。
  • 你为什么需要ng-change在这里你的模型保存你选择的值。
  • model 当前持有 i 的值,它是具有来自`populateMap. So when i use ngchange` 的名称和代码的对象,并调用一个函数来更改格式,以便我可以在模型中以正式的形式设置值像 ngObject.MainObj.specificFormatObj.code=123,ngObject.MainObj.specificFormatObj.name=ABC 一样,不确定我是否可以在没有 ngchange 的情况下做到这一点。感谢您的帮助。
  • @NeverGiveUp161 使用.indexOf 找到它的索引并以这种方式选择它。这是一个演示:Plunker

标签: javascript angularjs angularjs-directive angularjs-scope angular-controller


【解决方案1】:

由于您需要将模型名称作为参数传递,因此将其作为字符串从 html 传递:

ng-change="genericSetLookups('ngObject.SomeObject.abc',ngObject.SomeObject.abc)"

并且在控制器中作为模型名称包含“.”我们不能直接使用名称作为键。我们需要解析模型名称。经过一番搜索,我做了一些东西。希望它有效。

控制器代码:

    $scope.genericSetLookups(modelName, value){
        Object.setValueByString($scope, modelName, value);
    }

    Object.setValueByString = function(o, s, val) {
    s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
    s = s.replace(/^\./, '');           // strip a leading dot
    var a = s.split('.');
    for (var i = 0, n = a.length; i < n; ++i) {
        var k = a[i];
        if (k in o) {
            if(i != n-1){
                o = o[k];
            }
            else{
                o[k] = val;
            }
        } else {
            return;
        }
    }
    return o;
  }

信用也必须去@Alnitak寻求答案here

【讨论】:

  • 我将试一试并接受作为答案,现在我确信它对我有部分帮助,这是我的第一个要求ng-change="genericSetLookups('ngObject.SomeObject.abc',ngObject.SomeObject.abc)"'
  • 这就像魅力 :) 转换对我来说没什么大不了的,但传递模型名称和值 :) 谢谢
【解决方案2】:

我并没有真正理解您的问题,并且 cmets 并没有让我更清楚。我试图做的是给你一个我将如何处理选择框和模型的例子。

我将使用ng-options 循环遍历选项,并通过将{{selected.name}} 放入模板中来显示选定的选项。当然,如果您想以任何方式格式化所选值或对更改做出反应,您可以使用ng-change

希望对你有帮助。

Here is my JSFiddle

【讨论】:

  • 填充值没有任何问题,值填充正确。我的问题实际上是在 ng-change 之后开始的,在该函数内部,我想将 2 个值发送到我的函数,1 在 ng-model 中,第二个作为 ng-model 的字符串,它是 ngObject.abc 或 ngObject.xyz ,所以这个领域是动态的,我需要帮助。
  • 你的意思是:1 which is in ng-model 如果 ng-change 的函数是 vm.onChange 并且模型是 vm.selected,你希望如何看到传递给 @987654328 的选项@?
  • 对不起?你是什​​么意思: - 没明白。
  • 目前在办公室,无法访问聊天,如果你们有空,我会在家加入。感谢您的帮助,您之前更新了没有显示文字的评论。
  • 好的,我又读了一遍这是你想要的吗? ng-change="genericSetLookups(ngObject.MainObj.specificFormatObj, populateMap[ngObject.MainObj.specificFormatObj.name])"
【解决方案3】:

我不确定我是否理解您的问题。如果您想在模型中保存值代码 + 名称,也许此代码可以帮助您:

 <select ng-model="ngObject.MainObj.specificFormatObj" ng-options="(ppm.code + '-' + ppm.name) as ppm.name for ppm in populateMap">
 </select>

jsfiddle

【讨论】:

  • 根据您的代码,您能否建议如果我想将此模型传递给当前值为模型345-XYZ 且模型名称本质上为ngObject.MainObj.specificFormatObj 的函数,那么在我的函数中我可以使用这些值将它们复制到模型中的其他对象。像ng-click=(func(valueOfModel,nameOfModel)) 这样我的函数动态地采用不同的模型名称和值。
  • 如果你想在你的 genericSetLookups 函数中获取完整的对象,试试这个:jsfiddle.net/u46m751m/5我希望这对你有帮助
猜你喜欢
  • 2017-05-08
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
相关资源
最近更新 更多