Javascript ng repeat中的角度自动触发特定指令

Javascript ng repeat中的角度自动触发特定指令,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我有一个有趣的情况。 我有一个带有隔离范围的指令,它生成数字列表,用户可以像彩票一样选择数字。 我的问题是,我至少需要1行,如果用户只选择一行,那么当他单击play时,我想自动触发ng repeat中的下一个指令为他选择数字,我制作了这个plunker,这样你们可以更好地理解并帮助我 var app=angular.module('plunker',[]); 应用程序控制器('MainCtrl',函数($scope){ $scope.lineConfig={ 猜测范围:10 } $scope

我有一个有趣的情况。 我有一个带有隔离范围的指令,它生成数字列表,用户可以像彩票一样选择数字。 我的问题是,我至少需要1行,如果用户只选择一行,那么当他单击play时,我想自动触发ng repeat中的下一个指令为他选择数字,我制作了这个plunker,这样你们可以更好地理解并帮助我


var app=angular.module('plunker',[]);
应用程序控制器('MainCtrl',函数($scope){
$scope.lineConfig={
猜测范围:10
}
$scope.lines=[];
$scope.$on('lineAdded',函数(事件,行){
$scope.line.push(line);
});
$scope.play=函数(){
///这里我想检查$scope.lines.length
//小于一如果是,则自动触发下一个
//用于自动执行快速拾取并继续的行指令
}
})
.directive('行',函数()){
返回{
限制:“A”,
templateUrl:'line.html',
范围:{
lineConfig:'='
},
链接:函数($scope、elem、attr){
var guessRange=$scope.lineConfig.guessRange;
$scope.cells=[];
$scope.line={
nums:[]
};
$scope.$watch('line',函数(lotLine){
var finaLine={
行:$scope.line
}
如果($scope.line.nums.length>4){
$scope.$emit('lineAdded',finaLine);
}
},对);
_(u.range(1,guessRange+1)).forEach(函数(num){
$scope.cells.push({
num:num,
结果:错
});
});
$scope.userPickNum=函数(单元格){
如果(选定单元格){
cell.isSelected=false;
_.pull($scope.lotLine.nums,cell.num);
}否则{
cell.isSelected=true;
$scope.lotLine.nums.push(cell.num);
}
};
$scope.quickPick=函数(){
$scope.clearLot();
$scope.line.nums=u.sample(u.range(1,guessRange+1),5);
_($scope.line.nums).forEach(函数(num){
num=\ uu.find($scope.cells{
num:num
});
num.isSelected=true;
});
}
$scope.clearLot=函数(){
_($scope.cells).forEach(函数(num){
num.isSelected=false;
});
$scope.line.nums=[];
}
}
}
})
您可以将$index(自动存在于ng repeat scope中)-变量传递到指令中,并使其广播($index+1)的唯一事件,该事件是下一个实例的$index

该事件可以从$rootScope或repeat上方更近的范围广播。 然后你可以在那里捕捉事件

可能不是最好的方法。 如果有什么不清楚的地方,我可以试着详细说明

编辑

所以我玩了一会,想出了这个: 相当于

我没有使用事件或服务,而是使用指令控制器作为其内部所有行指令的父级:

.directive('lineHandler', function () {
    return {
        controller: function () {
            this.lines = [];
        }
    }
 })
然后需要在“line”指令中使用“lineHandler”控制器-控制器是一个单例(所有line指令中都注入了相同的实例)-然后可以设置该控制器来处理指令之间的通信

我在更新后的plnkr中对我的大部分代码进行了注释,并设置了一个示例,显示了我认为您在单击一个列表时所请求的内容—影响下面的列表


我希望这能有所帮助,如果有什么不清楚的地方,我会尽量详细说明。

下一条指令是什么意思?下一条指令,我想触发他的范围上的快速拾取。我不明白怎么做,如果你能用我的叉子,这会更有帮助。如果没有其他人超过我,我会稍后试用。试着想想用户只选最后一行的情况,这样我认为你的解决方案就行不通了。
.directive('lineHandler', function () {
    return {
        controller: function () {
            this.lines = [];
        }
    }
 })