AngularJs将模型值+模型名称传递给控制器​​

时间:2018-03-15 10:56:36

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

$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

  • 我希望在我的模型中以特定的方式存储查找值,包括名称和代码。在UI上我使用ng-repeat填充,所以当我选择一个特定的值时,我可以将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次查找,我可以编写一个通用代码,其中我可以将模型名称和模型值作为参数发送到函数并将其设置在那里,上面的方法可能是硬编码值,我想设置为模型一种特定的格式。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

希望它有所帮助。

Here is my JSFiddle

答案 2 :(得分:0)

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

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

jsfiddle