Javascript 具有隔离作用域的Angular自定义指令不触发ng click函数
我有以下自定义指令代码: 模板ReviewStandards.html 该指令用于: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
<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=函数{}伙计,请删除替换:是的,从你的指令中,你不需要替换它。谢谢-是对不明显的东西的全面解释。谢谢-是对不明显的东西的全面解释