Javascript 具有隔离作用域的Angular自定义指令不触发ng click函数

Javascript 具有隔离作用域的Angular自定义指令不触发ng click函数,javascript,angularjs,Javascript,Angularjs,我有以下自定义指令代码: 模板ReviewStandards.html 该指令用于: <div review-standards standards="review.ReviewStandards"></div> 其中标准只是标准对象的JSON数组 问题是,单击按钮时,ng click没有启动该功能。范围是孤立的-这是与此有关还是与按钮处于ng重复状态有关 试试这个,我只是从你的代码中删除替换 var app=angular.moduleapp,[]; app.con

我有以下自定义指令代码:

模板ReviewStandards.html

该指令用于:

<div review-standards standards="review.ReviewStandards"></div>
其中标准只是标准对象的JSON数组

问题是,单击按钮时,ng click没有启动该功能。范围是孤立的-这是与此有关还是与按钮处于ng重复状态有关

试试这个,我只是从你的代码中删除替换

var app=angular.moduleapp,[]; app.controllerctrl,功能$scope{ $scope.data=[{ 姓名:a }, { 姓名:b } ]; }; app.directivereviews标准,函数{ 变量模板=+ + {{standard.name}+ 标记完成+ + ; 返回{ 限制:A,, 排除:错误, 模板:模板, 范围:{ 标准:= }, 链接:functionscope、elem、attrs{ scope.mark=功能标准{ 控制台.日志标准 }; } }; }; 试试这个,我只是从你的代码中删除替换

var app=angular.moduleapp,[]; app.controllerctrl,功能$scope{ $scope.data=[{ 姓名:a }, { 姓名:b } ]; }; app.directivereviews标准,函数{ 变量模板=+ + {{standard.name}+ 标记完成+ + ; 返回{ 限制:A,, 排除:错误, 模板:模板, 范围:{ 标准:= }, 链接:functionscope、elem、attrs{ scope.mark=功能标准{ 控制台.日志标准 }; } }; }; 我会试着解释一下为什么会发生这种情况

使用replace:true时作用域继承存在问题,在模板中只有一个元素具有ng repeat

如果replace:false,则使用指令将模板粘贴到元素内部,这样您可以得到如下结果

<div review-standards standards="review.ReviewStandards"> <!-- here isolated scope from review-standards directive -->
    <div class="review-standard" ng-repeat="standard in standards"> <!-- here child scope created with ng-repeat -->
        <button ng-click="mark(standard)">Mark Complete</button>
    </div>
</div>
<div class="review-standard" ng-repeat="standard in standards" review-standards standards="review.ReviewStandards"> <!-- here child scope created with ng-repeat -->
    <button ng-click="mark(standard)">Mark Complete</button>
</div>
<div>
    <div class="review-standard" ng-repeat="standard in standards">
        <button ng-click="mark(standard)">Mark Complete</button>
    </div>
</div>
或者有点难看的解决方案:使用$parent属性代替继承

<div class="review-standard" ng-repeat="standard in $parent.standards">
    <button ng-click="$parent.mark(standard)">Mark Complete</button>
</div>
我会试着解释一下为什么会发生这种情况

使用replace:true时作用域继承存在问题,在模板中只有一个元素具有ng repeat

如果replace:false,则使用指令将模板粘贴到元素内部,这样您可以得到如下结果

<div review-standards standards="review.ReviewStandards"> <!-- here isolated scope from review-standards directive -->
    <div class="review-standard" ng-repeat="standard in standards"> <!-- here child scope created with ng-repeat -->
        <button ng-click="mark(standard)">Mark Complete</button>
    </div>
</div>
<div class="review-standard" ng-repeat="standard in standards" review-standards standards="review.ReviewStandards"> <!-- here child scope created with ng-repeat -->
    <button ng-click="mark(standard)">Mark Complete</button>
</div>
<div>
    <div class="review-standard" ng-repeat="standard in standards">
        <button ng-click="mark(standard)">Mark Complete</button>
    </div>
</div>
或者有点难看的解决方案:使用$parent属性代替继承

<div class="review-standard" ng-repeat="standard in $parent.standards">
    <button ng-click="$parent.mark(standard)">Mark Complete</button>
</div>

您如何在ngRepeat中使用指令?不确定我是否理解该问题如何与问题的其余部分相关?请尝试在控制器中使用ng click:function$scope,$element{$scope.click=function{}dude,请删除replace:true,从您的指令中,您不需要替换它。您如何在ngRepeat中使用该指令?我不确定我是否理解该问题与问题其余部分的关系?请尝试在控制器中使用ng click控制器:函数$scope,$element{$scope.click=函数{}伙计,请删除替换:是的,从你的指令中,你不需要替换它。谢谢-是对不明显的东西的全面解释。谢谢-是对不明显的东西的全面解释