2016-04-29 41 views
0

我有一个范围内的指令。我能够访问我的工厂内的指令作用域,但在获得作用域后,我需要将它与输入控件绑定为双向绑定。如何在角厂内定义ngModel?

例如指令范围:该范围从控制器获取,然后分配给指令。

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

我需要此范围绑定到输入控制

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

这里tranobj和字段将被动态地获取。问题是我将rowset定义为一个数组,但它是属性'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; 
}]); 
+1

你能发布punker片段?你也不应该从工厂访问整个范围。 –

+0

你从哪里得到数据?你不能修改它,所以它看起来你想要的方式? – Patrick

+0

@ Patrick..I将从指令中获取数据,指令将从控制器获取数据。 – bagya

回答

1

你有你的对象映射到一个对象数组。你可以通过这个链接Converting a JS object to an array

你可以做这样的内部控制

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

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

是的..你是正确的,但我怎么可以在指令或ng模型中创建数组里面的对象。请在我的情况下提供帮助...... – bagya

+0

数组内部对象在指令或ng模型中意味着什么?请您详细说明一下。 –

+0

如果我将在控制器内部的每个回路上实现上述角度。两个绑定如何工作?这就是我所问的原因,我将如何在指令或ngModel中实现双向绑定。 – bagya