Javascript AngularJS指令嵌套ng transclude内的隔离作用域

Javascript AngularJS指令嵌套ng transclude内的隔离作用域,javascript,angularjs,angularjs-scope,angularjs-ng-transclude,Javascript,Angularjs,Angularjs Scope,Angularjs Ng Transclude,我一直在互联网上寻找类似的东西,但仍然找不到答案 我有一个在整个应用程序中重复使用的指令,它允许用户对项目列表进行排序和搜索。我有多种类型的项目可以传递到指令(我传递的html模板),以及这些模板的多种用途。也就是说,有时我希望在该模板上有一个特定的按钮,但有时我需要另一个按钮。(这将在一分钟内变得更有意义) 因此,为了实现这一点,我创建了多个带有转换的指令。然而,我在范围界定方面遇到了严重的问题,我似乎无法准确地理解如何将隔离的范围传递给child指令 下面是我的代码: 项目列表指令 var

我一直在互联网上寻找类似的东西,但仍然找不到答案

我有一个在整个应用程序中重复使用的指令,它允许用户对项目列表进行排序和搜索。我有多种类型的项目可以传递到指令(我传递的html模板),以及这些模板的多种用途。也就是说,有时我希望在该模板上有一个特定的按钮,但有时我需要另一个按钮。(这将在一分钟内变得更有意义)

因此,为了实现这一点,我创建了多个带有转换的指令。然而,我在范围界定方面遇到了严重的问题,我似乎无法准确地理解如何将隔离的范围传递给child指令

下面是我的代码:

项目列表指令

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方法。是否正确检索了
数据原始标题
参数?