- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个指令如下:
<selectable-item-list items="model.items">
<item-template>
<span ng-bind="item.text"></span>
</item-template>
</selectable-item-list>
问题位于 <item-template>
,其中item
当内部 ng-repeat
时,将是当前迭代项的引用绑定(bind)在 <selectable-item-list>
内。
据我所知,嵌入似乎看不到指令的范围,因此,item.text
无法绑定(bind),因为没有 item
完全没有。
您将如何解决这种情况? 之前我是手动嵌入 <item-template>
但其他方法还有其他缺点/问题。
这是一个可运行的代码片段,可以作为我的实际案例的示例:
var app = angular.module("app", []);
app.controller("some", function() {
this.items = [{
text: "hello"
}, {
text: "bye"
}];
});
app.directive("test", function() {
return {
template: `<ol>
<li ng-repeat="item in items">
<div ng-transclude="itemTemplate"></div>
</li>
</ol>`,
transclude: {
"itemTemplate": "itemTemplate"
},
scope: {
"items": "="
}
}
});
<script src="https://code.angularjs.org/1.5.7/angular.js"></script>
<div ng-app="app" ng-controller="some as some">
<test items="some.items">
<item-template>
<span ng-bind="item.text"></span>
</item-template>
</test>
</div>
最佳答案
我的假设是错误的!当我说嵌入的内容无法访问包含指令范围时,我错了,因为其他问答:Why ng-transclude's scope is not a child of its directive's scope - if the directive has an isolated scope?这绝对已经过时了。
事实上,作为同一问答的一部分,还有另一个答案,有人描述说现在这个问题已经得到解决,并且 transcluded content can access its direct directive scope using $parent
.
所以我解决了我的问题,只需用 $parent.item
替换 item
属性访问即可,它成功了!
我添加了一个工作代码片段,其中包含此修复:
var app = angular.module("app", []);
app.controller("some", function() {
this.items = [{
text: "hello"
}, {
text: "bye"
}];
});
app.directive("test", function() {
return {
template: `<ol>
<li ng-repeat="item in items">
<div ng-transclude="itemTemplate"></div>
</li>
</ol>`,
transclude: {
"itemTemplate": "itemTemplate"
},
scope: {
"items": "="
}
}
});
<script src="https://code.angularjs.org/1.5.7/angular.js"></script>
<div ng-app="app" ng-controller="some as some">
<test items="some.items">
<item-template>
<span ng-bind="$parent.item.text"></span>
</item-template>
</test>
</div>
关于javascript - 使用 ng-transinclude 将作用域强制指定到命名槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38267288/
我在 StackOverflow 上看到了很多讨论 ng-transclude 的问题,但没有一个问题能通俗地解释它是什么。 文档中的描述如下: Directive that marks the in
我认为这是我用 angularjs 指令最难理解的概念之一。 来自http://docs.angularjs.org/guide/directive的文档说: transclude - compile
我在 AngularJS 1.5 中编写了一个名为“news”的自定义指令。 其布局如下: 该指令的 JavaScript 文件如下: return {
我在多个指令的元素上使用 ng-transclude 时遇到问题。 我有两个指令,其中一个指令实例化另一个指令: //Basic first directive, checks if the seco
我正在制作一个指令,其中包含一个加载的模板,以及一些传入的嵌入内容。所以本质上我的 html 是 Some transcluded content 但是,当我的页面加载时,有那么一瞬间我只
我有一个指令如下: 问题位于 ,其中item当内部 ng-repeat 时,将是当前迭代项的引用绑定(bind)在 内。 据我所知,嵌入似乎看不到指令
给定一个带有嵌入和隔离范围的指令(container1),当链接指令时,我有这些范围: Scope 004 但这不起作用,在 component1 内部,$scope.
我一直在互联网上寻找类似的东西,但仍然找不到答案。 我有一个在我的应用程序中重复使用的指令,它允许用户对项目列表进行排序和搜索。我有多种类型的项目可以传递到指令(我传递的 html 模板)以及这些模板
我创建了指令来通过单击 对表进行排序但无法正确排序函数执行。我的问题是如何按升序/降序对数据进行排序。该指令可以与任何静态或动态表链接,然后使用 tranluc 和 $compile 创建我们自己的
我有一个项目,我们使用了很多 Angular ui-select 指令。 ui-select 的使用是标准化的,我们使用它的各个点之间的唯一区别是 ui-select-choice 模板和用于获取结果
我尝试搜索有关 SO 的引用资料。但对答案不满意。我是 Angular 的新手。我试图通过创建这样的指令来实现嵌入: app.directive('wrapperDirective',function
我是一名优秀的程序员,十分优秀!