【问题标题】:Bind ngInclude to different models将 ngInclude 绑定到不同的模型
【发布时间】:2013-03-20 02:31:44
【问题描述】:

是否可以为 ngInclude 指定模型,以便在包含的模板内进行的任何更改都反映在指定的模型上。例如:

我有一个模型,例如:

$scope.member = {

    name: "Member1",
    children:[
    {
        name:"Child1"
    },
    {
        name:"Child2"
    }
    ]
};

和模板:

<script type="text/ng-template" id="name.html">
    <input type="text" ng-model="member.name"/>
</script>

现在是否可以传递 ngInclude “成员”或任何子项并修改其各自的名称属性?我尝试将 ng-model 传递给 ng-template 但它不起作用。我尝试使用预期模型动态加载范围,但如果模型被删除,我会留下一个孤立模板。以下是jsfiddle代码:

http://jsfiddle.net/vaibhavgupta007/p7E5K/

我希望重复使用该模板,而不是为不同的模型复制相同的模板。我参考了这个问题:

How to specify model to a ngInclude directive in AngularJS?

但是这里的模型并没有被删除。

编辑

到目前为止,我还没有掌握创建自定义指令的概念。但是结合 ng-include 创建一个新指令会有帮助吗?

【问题讨论】:

  • 使用指令或绑定选择事件到您的表单可能更容易。示例太粗略,无法理解用法。你能提供一个你想如何使用它的html渲染吗?

标签: angularjs angularjs-scope


【解决方案1】:

你最后一个问题的答案是:是的。在指令中,您还定义了模板和范围。范围的内容完全掌握在您手中。

请看这里:http://jsfiddle.net/vgWQG/1/

用法:

Member: <member model="member"></member>
<ul>
    <li ng-repeat="child in member.children">
        Child {{$index}}: <member model="child"></member>   
    </li>
</ul>

指令:

app.directive('member', function(){
return {
    template : '<input type="text" ng-model="member.name"/>',
    replace : true,
    restrict: 'E',
    scope : {
        'member' : '=model'
    },
    link: function(scope, element, attr) {}
};

});

我已将模板移动到内联变体中,因为我无法让模板缓存在 jsfiddle 中工作。在现实世界中,templateUrl: 'name.html' 应该没问题。

这就是你想要的?

【讨论】:

  • 但是,正确的命名应该是 member-editable 或附加属性 editable,它呈现输入而不是默认的只读值。
  • 感谢您的回复。这正是我所需要的。指令中的 templateUrl 是否总是需要外部资源?该模板包含在我的页面中,但 templateUrl = "'name.html'" 发送了一个请求。
  • @knali 感谢您的帮助。但是我陷入了另一种情况。模板无法从控制器范围访问任何属性。请参考这个小提琴:jsfiddle.net/vaibhavgupta007/mVBaC/1
  • 范围是独立定义的,所以你必须像这里一样应用一个额外的参数:jsfiddle.net/7w5cM 你应该记住:你怎么能确定指令会找到 prefix ?只有当你定义它。您的小提琴显示了一个微小的依赖关系(模型键 prefix)。
  • 因为不工作 templateCache:这似乎是一个 jsfiddle 的事情.. HTML 正在被修改左右.. 我不知道。如果您将模板放在顶部,它可以工作:jsfiddle.net/LLMWh
猜你喜欢
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
相关资源
最近更新 更多