Javascript AngularJS指令嵌套ng transclude内的隔离作用域
我一直在互联网上寻找类似的东西,但仍然找不到答案 我有一个在整个应用程序中重复使用的指令,它允许用户对项目列表进行排序和搜索。我有多种类型的项目可以传递到指令(我传递的html模板),以及这些模板的多种用途。也就是说,有时我希望在该模板上有一个特定的按钮,但有时我需要另一个按钮。(这将在一分钟内变得更有意义) 因此,为了实现这一点,我创建了多个带有转换的指令。然而,我在范围界定方面遇到了严重的问题,我似乎无法准确地理解如何将隔离的范围传递给child指令 下面是我的代码: 项目列表指令Javascript AngularJS指令嵌套ng transclude内的隔离作用域,javascript,angularjs,angularjs-scope,angularjs-ng-transclude,Javascript,Angularjs,Angularjs Scope,Angularjs Ng Transclude,我一直在互联网上寻找类似的东西,但仍然找不到答案 我有一个在整个应用程序中重复使用的指令,它允许用户对项目列表进行排序和搜索。我有多种类型的项目可以传递到指令(我传递的html模板),以及这些模板的多种用途。也就是说,有时我希望在该模板上有一个特定的按钮,但有时我需要另一个按钮。(这将在一分钟内变得更有意义) 因此,为了实现这一点,我创建了多个带有转换的指令。然而,我在范围界定方面遇到了严重的问题,我似乎无法准确地理解如何将隔离的范围传递给child指令 下面是我的代码: 项目列表指令 var
var app = angular.module('main');
app.directive('itemList', function(){
var linkFunction = function (scope, element, attributes, ctrl, transclude) {
//Things that modify the scope here. This scope is what I want to pass down to the child directives
//NOTE: I do not currently have a working transclude function which is why I didn't include it here because I have no idea what to do with it
scope.pagedItems = groupItemsToPages(items);
scope.currentPage = 0;
};
return {
restrict: 'E',
replace: 'true',
transclude: true,
templateUrl: 'partials/directives/item-list.html',
link: linkFunction,
scope: {
searchPlaceholder: "@",
items: "=",
control: "="
}
};
});
item-list.html
<div class="form-group">
<!-- I won't put all of the html here, just some to show you what i'm going for -->
<div class="search-field">
<input type="text" ng-model="query.value" placeholder="{{searchPlaceholder}}/>
</div>
<table class="table table-hover">
<tbody>
<tr ng-repeat="item in pagedItems[currentPage]">
<td ng-transclude></td>
</tr>
</tbody>
</table>
</div>
下面是一个示例模板(再次极度简化,只是为了向您展示布局)
profile-template.html
<div>
<p>item.name</p>
<p>item.description</p>
</div>
<div ng-transclude></div>
item.name
项目.说明
下面是一个调用此代码的HTML示例
tab.html
<div class="tab">
<div class="available-items">
<item-list control="profileControl" search-placeholder="Search Profiles" items="profileControl.profiles">
<item-template template-url="partials/profile-template.html">
<button type="button" ng-click="launchProfile(item.id)">Launch Profile</button>
</item-template>
</item-list>
</div>
</div>
发布配置文件
现在您已经看到了代码。我遇到的问题是,我的profile-template.html包含没有从上面的指令中获取作用域,即使我已经尝试将作用域克隆到它。我看到的所有示例都要求您从指令中删除模板键,并假设您只返回转换中的代码。在我的例子中,我想在模板中显示其他html
任何帮助都将不胜感激您可以使用
$parent
属性访问更高的范围,而不是尝试在指令之间传递范围
例如,在项目模板
控制器中,您可以使用以下代码从项目列表
访问更高的范围:
if ($parent.searchPlaceholder === '') {
...
}
您可以使用
$parent
属性访问更高的范围,而不是在指令之间传递范围
例如,在项目模板
控制器中,您可以使用以下代码从项目列表
访问更高的范围:
if ($parent.searchPlaceholder === '') {
...
}
$parent
属性不能解决您的问题吗?我真的觉得自己很傻。是的,这确实解决了我的问题。。。除非出于某种原因,这无法解决。我在父作用域上有其他方法可以很好地解决。。。ODD不是$parent.item.icon
,而是类似于$parent.items[i]。icon
在循环中通过$parent.items
列表?这已经在ng repeat中了。下面是不起作用的代码:''由于某种原因,retrieveIcon方法根本没有被调用。并且数据原始标题
参数被正确地检索到了吗?$parent
属性没有解决您的问题吗?我真的觉得很愚蠢。是的,这确实解决了我的问题。。。除非出于某种原因,这无法解决。我在父作用域上有其他方法可以很好地解决。。。ODD不是$parent.item.icon
,而是类似于$parent.items[i]。icon
在循环中通过$parent.items
列表?这已经在ng repeat中了。以下是不起作用的代码:“”由于某种原因,根本没有调用retrieveIcon方法。是否正确检索了数据原始标题
参数?