gpt4 book ai didi

javascript - 使用 angular.js 中的输入从指令调用 Controller

转载 作者:行者123 更新时间:2023-11-30 05:31:58 25 4
gpt4 key购买 nike

我正在通过制作基于浏览器的数独解算器来学习 Angular。有很多方法可以解决我的问题,但我正在寻找最 Angular 方法。

我的 html 使用嵌套的 ng-repeat 创建了一个 9x9 的文本输入网格。我想要实现的行为是这样的:在用户将数字输入文本输入(使用名为“grid-cell”的指令)后,将触发 onBlur 事件并将该数字添加到 Controller 的 9x9数组(在 Controller 中标识为 $scope.grid,它初始化为一个由九个空字符串组成的数组)

我的 html 看起来像这样。我对此感觉相当不错:

<div ng-controller="SudokuController">
<table>
<tr ng-repeat="row in dimension">
<td ng-repeat="col in dimension">
<grid-cell row="{{ row }}" col="{{ col }}"></div>
</td>
</tr>
<tr>
<td id="submit" colspan="9">
<button ng-click="submit()" id="submit">Submit</button>
</td>
</tr>
</table>
</div>

我的 Angular 代码如下所示(我觉得我只需要一个 Controller 和一个指令):

var app = angular.module('app',[]);

app.controller('SudokuController', function($scope) {
$scope.dimension = [1,2,3,4,5,6,7,8,9];
$scope.grid = [];
for (var i = 1; i<=$scope.dimension.length; i++) {
$scope.grid[$scope.grid.length] = ['','','','','','','','',''];
}
$scope.addNumber = function(row, col, val) {
$scope.grid[row][col] = val; // I would like it to work this way
};
$scope.submit = function() {
// insert sudoku-solving algorithm here
};
});

app.directive('gridCell', function() {
return {
restrict: "EA",
template: '<input type="text" />',
replace: true,
scope: {
row: '@',
col: '@'
},
link: function(scope, elem, attrs) {
elem.bind('blur', function() {
//how do I correctly write this?
scope.addNumber(scope.row, scope.col, elem[0].val);
});
}
}
});

这行不通;在指令的链接中使用 elem.bind() 似乎无法与 Controller 通信。但是,我什至不确定这是否是处理它的“正确”方法。我也想知道我是否应该做这样的事情:

<td ng-repeat="col in dimension">
<grid-cell row="{{ row }}" col="{{ col }}" ng-blur="addNumber(row, col, getThisValueSomehow)"></div>
</td>

提前致谢。

最佳答案

您可以在 grid-cell 指令中更新网格:

app.controller('MainCtrl', function($scope) {
$scope.dimension = [1,2,3,4,5,6,7,8,9];
$scope.grid = [];
for (var i = 1; i<=$scope.dimension.length; i++) {
$scope.grid[$scope.grid.length] = ['','','','','','','','',''];
}
$scope.submit = function() {
// insert sudoku-solving algorithm here
};
});

app.directive('gridCell', function() {
return {
restrict: "EA",
template: '<input type="text" ng-model="value" />',
replace: true,
scope: {
row: '&',
col: '&',
grid: '='
},
link: function(scope, elem, attrs) {
elem.bind('blur', function() {
scope.$apply(function () {
if (scope.value)
{
scope.grid[scope.row()][scope.col()] = scope.value;
}
});
});
}
}
});

html:

<tr ng-repeat="row in dimension">
<td ng-repeat="col in dimension">
<grid-cell row="row" col="col" grid="grid"></grid-cell>
</td>
</tr>

http://plnkr.co/edit/peDjFbKGm6ydO4E45b5u?p=preview

关于javascript - 使用 angular.js 中的输入从指令调用 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26374504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com