【问题标题】:Dynamically initialize a ng-model directive动态初始化 ng-model 指令
【发布时间】:2014-04-30 17:46:05
【问题描述】:

我正在根据输入的类型动态构建一个带有角度的表单:

<div ng-controller="formController" ng-repeat="field in formFields" ng-switch="field.type">
    <div ng-switch-when="text">
        <!-- Something -->
    </div>

    <div ng-switch-when="dropdown">
        <myDirective my-data="field.param" ng-model="field.model"></myDirective>
    </div>
</div>

我构建自定义下拉输入的指令有两个问题:

  1. Ng-model 指令将名称 field.model 解释为纯文本,而我希望属性 ng-model="field.model" 将替换为包含在 field.model 中的值。大括号似乎在这里不起作用。有什么想法吗?

  2. 如何让 ng-model 值在我的表单控制器和自定义指令的控制器中都可以访问?

字段对象示例:

{
    label : "Name",
    model : "employeeName",
    type : "dropdown",
    param : {
        dropdownArray : result,
        dropdownName : 'Nom',
        dropdownFieldValue : 'nameUUID',
        dropdownVisibleValue : [ 'employeeSS', 'employeeName' ]
    }    
}

然后在我的控制器中,我应该能够通过以下方式访问此下拉值:$scope.employeeName

【问题讨论】:

  • 字段对象是什么样的?您是在视图中动态创建它吗?
  • @MohammadSepahvand 我只是添加了这个对象的一个​​例子

标签: angularjs controller directive


【解决方案1】:
  1. 听起来您正在通过提供给指令中link 函数的属性输入参数访问field.model。相反,您应该通过范围变量访问它。

    link: function(scope, element, attributes) {
      // attributes.ngModel will yield 'field.model'
      // scope.ngModel will contain the actual value of field.model
    }
    
  2. 如果您没有为指令明确定义隔离范围,那么分配给 field.modelng-model 应该可以通过上面提到的范围变量在您的指令中使用。

    scope: false  // This is the default
    
    // Define an isolate scope with field.model available through scope.ngModel
    scope: {
      ngModel: '='
    }
    

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多