在下面的代码中,我使用属性 selected 进行从指令到其父控制器的回调。
我注意到当我将selected更改为setSelected或XXXSelected(前缀似乎并不重要)时,父控制器上的相应方法永远不会被调用,如注释中所述。
显然,这与我还不知道的其他一些概念相冲突,我认为我不能使用XXXSelected作为属性名称。那是对的吗?如果是这样,在命名方面还存在哪些其他限制?
('设置'在我的问题域中处于对象中,并不意味着是方法或设置者)
parent.html
<div ng-repeat="set in parentCtrl.sets">
<my-directive set="set" selected="parentCtrl.setSelected(set)"></my-directive>
<!-- this would not work: my-directive set="set" XXXSelected="parentCtrl.setSelected(set)"></my-directive -->
</div>
parent.controller.js
'use strict';
angular.module('app')
.controller('ParentCtrl', function () {
this.setSelected = function(set) {
// does not get called when replacing selected with XXXSelected
console.log(set.someAttribute);
};
});
set.html
<div ng-click="setCtrl.select()"> … </div>
set.directive.js
'use strict';
angular.module('app')
.directive('myDirective', function () {
function SetCtrl($scope) {
this.select = function() {
console.log($scope.selected); // reports: function(locals)
$scope.selected({set: $scope.set});
//console.log($scope.XXXSelected); // also reports: function(locals)
//$scope.XXXSelected({set: $scope.set}); //would not get called
}
}
return {
templateUrl: 'set.html',
restrict: 'E',
controller: SetCtrl,
controllerAs: 'setCtrl',
scope: {
selected: '&',
//XXXSelected: '& // this would not work
}
};
});
答案 0 :(得分:0)
尝试使用:
<my-directive set="set" x-x-x-selected="parentCtrl.setSelected(set)"></my-directive>
带有-
的HTML中的角度分割在JavaScript中有一个CamelCase。
因此,如果您将JS-Property命名为myAttributeLooksLikeThis
,则可以在html中使用my-attribute-looks-like-this=""
。这是由于HTML标签的不区分大小写。
您还可以在官方文档中了解有关指令here
的信息