Unit Test Karma Jasmine SyntaxError: Parse error on "&" Angular Directive binding
Unit Test Karma Jasmine SyntaxError: Parse error on "&" Angular Directive binding
我在我的指令行得到 SyntaxError: Parse error
,我想在其中使用来自父指令方法的“&”单向绑定
myApp.directive('datasourceDeleteBtn', [function() {
return {
restrict: 'E',
replace: true,
template: '<a href="#">✕</a>',
scope: {
datasourceIndex: '@',
removeParentDiv: '&'
},
link: link
};
function link(scope, element, attr) {
element.bind('click', function(event) {
event.preventDefault();
scope.deleteDatasource(scope.datasourceIndex);
});
// Notify parent directive
scope.deleteDatasource = function(datasource_index) {
// conditional stuff that happens not included
// {} required for passing values to "&" parent scope method
scope.removeParentDiv({datasource_index});
};
}
}]);
HTML
<parent-div ng-repeat> // this is just a mockup not literal
<datasource-delete-btn datasource-index="{{$index}}" remove-parent-div="removeParentDiv()"></datasource-delete-btn>
</parent-div>
通过 removeParentDiv
的 ng-repeat 的父级 div
// parentDiv directive has this
scope.datasources = [];
scope.removeDatasourcePicker = function(index) {
scope.datasources.splice(index, 1); // ie take it out
};
看来问题是 Jasmine 不喜欢 { }。删除括号会导致测试通过(由于 & 需要 {},所以会出现典型错误)。
You are getting error because you are passing json in wrong format in
method
您没有从指令中正确调用指令范围 removeParentDiv: '&'
中传递的方法。因为你只做 scope.removeParentDiv({datasource_index});
不会将索引参数传递给方法。
要使其正常工作,您需要进行一些更改。
指令元素方法应该是
remove-parent-div="removeParentDiv(index)"
并且在从指令调用它时,通过具有 json 结构,其中 index
只是参数,datasource_index
是它的值。
scope.removeParentDiv({index: datasource_index});
从 click
事件调用 scope.deleteDatasource(scope.datasourceIndex);
方法后执行 运行 摘要循环,以便更新 scope
绑定。
element.bind('click', function(event) {
event.preventDefault();
scope.deleteDatasource(scope.datasourceIndex);
scope.$apply(); //to run digest cycle, to keep binding in sync
});
我在我的指令行得到 SyntaxError: Parse error
,我想在其中使用来自父指令方法的“&”单向绑定
myApp.directive('datasourceDeleteBtn', [function() {
return {
restrict: 'E',
replace: true,
template: '<a href="#">✕</a>',
scope: {
datasourceIndex: '@',
removeParentDiv: '&'
},
link: link
};
function link(scope, element, attr) {
element.bind('click', function(event) {
event.preventDefault();
scope.deleteDatasource(scope.datasourceIndex);
});
// Notify parent directive
scope.deleteDatasource = function(datasource_index) {
// conditional stuff that happens not included
// {} required for passing values to "&" parent scope method
scope.removeParentDiv({datasource_index});
};
}
}]);
HTML
<parent-div ng-repeat> // this is just a mockup not literal
<datasource-delete-btn datasource-index="{{$index}}" remove-parent-div="removeParentDiv()"></datasource-delete-btn>
</parent-div>
通过 removeParentDiv
的 ng-repeat 的父级 div // parentDiv directive has this
scope.datasources = [];
scope.removeDatasourcePicker = function(index) {
scope.datasources.splice(index, 1); // ie take it out
};
看来问题是 Jasmine 不喜欢 { }。删除括号会导致测试通过(由于 & 需要 {},所以会出现典型错误)。
You are getting error because you are passing json in wrong format in method
您没有从指令中正确调用指令范围 removeParentDiv: '&'
中传递的方法。因为你只做 scope.removeParentDiv({datasource_index});
不会将索引参数传递给方法。
要使其正常工作,您需要进行一些更改。
指令元素方法应该是
remove-parent-div="removeParentDiv(index)"
并且在从指令调用它时,通过具有 json 结构,其中
index
只是参数,datasource_index
是它的值。scope.removeParentDiv({index: datasource_index});
从
click
事件调用scope.deleteDatasource(scope.datasourceIndex);
方法后执行 运行 摘要循环,以便更新scope
绑定。element.bind('click', function(event) { event.preventDefault(); scope.deleteDatasource(scope.datasourceIndex); scope.$apply(); //to run digest cycle, to keep binding in sync });