Sn0*_*opr 1 javascript controller directive require angularjs
我想用复选框(这是一个重复列表)指令制作一个类别树.
我做了一个名为categoriesTreeContainer的指令,它包含了所有类别列表
我做了另一个名为指令categoryItem是containes分类项目这是孩子categoriesTreeContainer
这就是我所做的categoriesTreeContainer:
myApp.directive('categoriesTreeContainer', function(){
return {
restrict : 'E',
template : '<category-item ng-repeat="category in categoriesTree" category="category"></category-item>',
scope : {
categoriesTree : "=categoriestree",
selectedCategories : "=ngModel",
},
controller : function($scope, $element, $attrs){
$scope.selectedCategories = [];
$scope.onSelectionChange = function(category){
console.log('yah');
}
}
}
Run Code Online (Sandbox Code Playgroud)
})
对于categoryItem:
myApp.directive('categoryItem', function($compile){
return {
require: '^categoriesTreeContainer',
restrict : 'E',
//replace : true,
transclude : true,
scope : {
category : "=category"
},
link : function(scope, element, attrs, categoriesTreeCtrl){
console.log(categoriesTreeCtrl);
if(scope.category.subCategories.length>0){
element.append($compile(
'<div class="panel panel-default panel-treelist">'+
'<div class="panel-heading"><h4 class="panel-title">'+
'<label data-toggle="collapse" data-target="#{{category.$$hashKey}}">'+
'<input type="checkbox" ng-change="categoriesTreeCtrl.onSelectionChange(category)" ng-model="category.selected" />'+
' {{category.name}}</label></h4></div><div id="{{category.$$hashKey}}" class="panel-collapse collapse">'+
'<div class="panel-body">'+
'<category-item id="{{category.$$hashKey}}" ng-repeat="subCategory in category.subCategories" category="subCategory" categoriestree="categoriesTree" ng-model="selectedCategories">'+
'</category-item></div></div></div>'
)(scope))
}else{
element.append($compile('<label><input ng-change="categoriesTreeCtrl.onSelectionChange(category)" type="checkbox" ng-model="category.selected"> {{category.name}}</label><br/>')(scope));
}
}
}
Run Code Online (Sandbox Code Playgroud)
})
在DOM中:
<categories-tree-container categoriestree="categoriesTree" ng-model="selectedCategories"></categories-tree-container>
Run Code Online (Sandbox Code Playgroud)
树按我想要的方式呈现.问题是categoryItem指令中所需的控制器'^ categoriesTreeContainer'是void.我做了console.log(categoriesTreeCtrl)对categoriesTreeCtrl的链接功能,这是什么就是什么,我得到:
c {},一个虚空对象.
我究竟做错了什么?
这categoriesTreeCtrl将是void object因为控制器什么都没有.如果您需要categoriesTreeCtrl.onSelectionChange从子指令访问,则不应将其onSelectionChange作为其一部分$scope,而是将其定义为控制器的属性.
controller: function($scope, $element, $attrs){
this.onSelectionChange = function(category){ ... };
// $scope.onSelectionChange = function(category){...}
}
Run Code Online (Sandbox Code Playgroud)
其他:
在categoriesTreeCtrl对孩子的指令是不相等$scope.categoriesTreeCtrl的,这意味着,你不能说categoriesTreeCtrl从你的模板.看看ng-change价值.
| 归档时间: |
|
| 查看次数: |
1076 次 |
| 最近记录: |