gpt4 book ai didi

javascript - 如何在 Angular 工厂内定义ngModel?

转载 作者:行者123 更新时间:2023-12-03 07:03:29 25 4
gpt4 key购买 nike

我在指令中有一个范围。我可以访问工厂内的指令范围,但在获取范围后,我需要将其与输入控件绑定(bind)以进行双向绑定(bind)。

例如指令作用域:该作用域从 Controller 获取,然后分配给指令。

 $scope.model = {
"entityinfo": {
"entity":"",
"tenantId":"292FEC76-5F1C-486F-85A5-09D88096F098",
"timeStamp":"2015-12-15T10:16:06.322Z"
},
"collections":{}
}

我需要将此范围绑定(bind)到输入控件

var template='<input  ng-model="model[tranobj].rowset[0][field]">';

这里 tranobj 和 field 将被动态获取。问题是我将行集定义为数组,但它是属性“0”内的对象。

它是这样的:

"Customer29Jan16": {
"rowset": {
"0": {
"CuId": "dgdfg",
"Name": "dgdgf",
"Quantity": "3",
"Rate": "5",
"Amount": "4"
}
}
}

但我需要这样的:

"Customer29Jan16": {
"rowset": [
{
"CuId": "dgdfg",
"Name": "dgdgf",
"Quantity": "3",
"Rate": "5",
"Amount": "4"
}
]
}

添加指令代码:

bosAppModule.directive('layoutTableCellControlControlRender',['$compile','layoutRenderingControlsFactory','soObjectFactory','$parse', function($compile,layoutRenderingControlsFactory,soObjectFactory,$parse){
var layoutTableCellControlRenderObj={};
linkFnTableCellControlRender=function(scope, element, attributes, controllerCtrl) {
scope.controlData="NOCONTROLDATA";
var controlContent="";
var bindingPath = "";
angular.forEach(scope.mapperData.collections.controltype.rowset, function (value, index) {
if(value.controltypeid==scope.controlId){
scope.controlData=value.controltypename;
if(scope.controlData){
controlContent=angular.element(layoutRenderingControlsFactory[scope.controlData](scope.controlId, bindingPath));
$compile(controlContent)(scope);
element.append(controlContent);
}else{
console.log("## control data not matching");
}

}
});

};
layoutTableCellControlRenderObj.scope={attributeId:'=',controlId:'=',layoutData:'=',pageObject:'=',mapperData:'=', cellControlId:'=', soData:"=",model:"=",field:"@",tranobj:"@" };
layoutTableCellControlRenderObj.restrict='AE';
layoutTableCellControlRenderObj.replace='true';
layoutTableCellControlRenderObj.template="<div class='col-xs-12 col-sm-12 col-md-6 col-lg-6' ng-attr-id={{cellControlId}} cell-control-id='tablecellcontrol.layouttablecellcontrolcellcontrolid' " +
"control-id='tablecellcontrol.layouttablecellcontrolcontroltypeid' " +
"layout-data='layoutData' page-object='pageObject' mapper-data='mapperData' attribute-id='tablecellcontrol.layouttablecellcontrolbindingobjectattributeid'" +
"model='model' field={{tablecellcontrol.attributename}} tranobj={{tablecellcontrol.objectname}}>" +

layoutTableCellControlRenderObj.link = linkFnTableCellControlRender;
return layoutTableCellControlRenderObj;
}]);

最佳答案

您必须将对象映射到对象数组。您可以通过此链接Converting a JS object to an array .

你可以在 Controller 内这样做

var array = [];
angular.forEach(Customer29Jan16.rowset, function(object, index) {
array.push(object);
});

console.log(array);
Customer29Jan16.rowset = array;

关于javascript - 如何在 Angular 工厂内定义ngModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36931635/

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