1

编辑:事实证明这确实有效,它只是没有在检查器中显示“模型”属性后面的内容。我没有注意到它,因为我使用的那个特定数据点上没有内容。Facepalm感谢所有帮助过的人。

所以我试图通过创建一个非常详细的嵌套指令结构来简化我的表单结构。我正在使用非常基本的角度代码来实现这一点,但由于某种原因,使用父级的属性作为子指令属性的值不起作用(下面的代码解释,必须更改一些专有词,但它本质上相同)。我究竟做错了什么?

父 HTML 指令调用:

<field-label project-for="projectName" project-model="data.product.projectName">Project Name</field-label>

指令代码:

app.directive("fieldLabel", function() {
  return {
    restrict: "E",
    transclude: true,
    scope: { model: '=projectModel', for: '@projectFor' },
    templateUrl: 'views/products/label.html',
  };
});

编辑:根据请求,这里使用的另一个指令:

app.directive("projectOtherView", function() {
  return {
    restrict: "E",
    scope: { field: '=projectOtherViewModel' },
    templateUrl: 'views/products/XXX.html',
  };
});

模板 HTML

<div class="col-sm-2 text-right">
  <label for="{{for}}" class="control-label" ng-transclude></label>
  <project-other-view project-other-view-model="model"></project-other-view>
</div>

'for' 工作正常,但 'model' 只通过自身,而不是它应该是什么(我在开始时通过的模型名称)。

4

2 回答 2

0

你能创建一个复制你的问题的jsfiddle吗?我感觉您的问题与此有关

于 2013-10-18T14:17:37.137 回答
0

根据我的评论。除了您定义的内容外,它不显示任何内容,在这种情况下,“模型”一词很好,它仍然连接到父模型。因此,如果您将表达式 {{field}} 放入您的子模板中,您将可以访问模型中的双向绑定。所以你的模型层次结构看起来像这样:

level 1: data.product.projectName (binding to next level: project-model="data.product.projectName")
    level 2: projectModel (binding to next level: model: '=projectModel')
        level 3: model (binding to next level: project-other-view-model="model")
           level 4: projectOtherViewModel (binding to next level: field: '=projectOtherViewModel' )

请记住连字符被删除并且 CamelCased 所以模板中的“project-model”在 javascript 中变成了“projectModel”。

有关工作示例,请参阅http://plnkr.co/edit/MsAHkTU3KLXWhpplWAPs?p=preview 。

于 2013-10-22T09:58:21.970 回答