AngularJS表中未识别$scope方法
$scope methods not recognized from table AngularJS
我正在使用ng repeat通过窗体绑定数组。这是代码。
HTML:
<form>
<table>
<tr data-ng-repeat="x in names">
<td><textarea placeholder="New Name" ng-model="x.name" name="" ></textarea></td>
<td><button style="background:#f00;" ng-click="removeChoice(x)">-</button></td>
</tr>
</table>
</form>
Javascript:
.controller('TerrItemCtrl', function($scope){
$ionicModal.fromTemplateUrl('templates/addAddress.html', {
scope: $scope,
animation: 'animated bounceInDown',
hideDelay: 920
}).then(function (modal) {
$scope.names = [{ 'id': 'name1'}];
$scope.modal = modal;
$scope.modal.show();
});
$scope.removeChoice = function (x) {
for (i = 0; i < $scope.names; i++) {
if ($scope.names[i].id === x.id) {
$scope.names.splice(i);
break;
}
}
};
});
我在这个表单的控制器中有一个$scope.removeChoice函数,html找不到它。我相信这是因为我使用的数组,但这是我将(-(按钮放在输入标记右侧的唯一方法。有办法绕过这个吗?
var app = angular.module('myApp', []);
app.controller('TerrItemCtrl', function($scope) {
$scope.names = ["a", "b", "c"];
$scope.removeChoice = function(index) {
$scope.names.splice(index, 1);
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<form ng-app="myApp" ng-controller="TerrItemCtrl">
<table>
<tr data-ng-repeat="x in names">
<td>
<textarea placeholder="New Name" ng-model="x" name=""></textarea>
</td>
<td>
<button style="background:#f00;" ng-click="removeChoice($index)">-</button>
</td>
</tr>
</table>
</form>
ng-repeat
引入了一个新的作用域。因此,要访问父对象,必须使用$parent.someMethodInParentScope()
var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope) {
$scope.names = ["a", "b", "c"];
$scope.removeChoice = function(x) {
$scope.names.splice(x,1);
}
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<form>
<table data-ng-repeat="x in names">
<tr>
<td>
<textarea placeholder="New Name" ng-model="x" name=""></textarea>
</td>
<td>
<button style="background:#f00;" ng-click="$parent.removeChoice($index)">-</button>
</td>
</tr>
</table>
</form>
</div>
这一点在ng repeat的文档中可能并不明显。您必须检查文档中的$rootScope
:https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$parent
试试这个
var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope) {
$scope.names = ["a", "b", "c"];
$scope.removeChoice = function(x) {
$scope.names.splice(x, 1);
}
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<form>
<table>
<tr data-ng-repeat="x in names">
<td>
<textarea placeholder="New Name" ng-model="x" name=""></textarea>
</td>
<td>
<button style="background:#f00;" ng-click="removeChoice($index)">-</button>
</td>
</tr>
</table>
</form>
</div>
尝试使用这个:
.controller('TerrItemCtrl',['$scope', function($scope){
$ionicModal.fromTemplateUrl('templates/addAddress.html', {
scope: $scope,
animation: 'animated bounceInDown',
hideDelay: 920
}).then(function (modal) {
$scope.names = [{ 'id': 'name1'}];
$scope.modal = modal;
$scope.modal.show();
});
$scope.removeChoice = function (x) {
for (i = 0; i < $scope.names; i++) {
if ($scope.names[i].id === x.id) {
$scope.names.splice(i);
break;
}
}
};
}]);
.controller('TerrItemCtrl', ['$scope', function($scope){
}]);
应该尝试此语法将作用域作为数组以及函数进行传递。问题可能是,当函数执行时,它没有在可执行上下文中传递范围变量。
相关文章:
- 使用$scope方法时的ControllerAs语法
- Angular:如何在状态更改时调用scope方法
- 如何从其他方法访问Angular.js$scope
- 为什么不'我的角度测试$scope上定义了方法
- 在AngularJS中重构$scope操作的更好方法
- 我正在使用 $scope.$apply 在 http 调用后更新对象数组.谁能告诉我正确的方法
- 从同一控制器 Angularjs 中的另一种方法访问$scope变量
- $scope.$on('$routeChangeSuccess'..) 和在 scope 函数中调用方法
- 在指令中使用 $scope.$watch 处理未定义变量的替代方法
- 检查会话存储并将变量传递给 Angular 中的$scope的正确方法
- AngularJs Jasmine 无法在方法$rootScope中调用$scope方法
- 在jasmine中调用$scope方法
- AngularJS表中未识别$scope方法
- 从嵌套指令中调用controller $scope方法
- 如何从包含控制器的指令中调用$scope方法
- 如何在AngularJS控制器中使用$scope方法调用函数
- $scope's方法通过ng-click调用:由IE执行两次
- Angularjs的Scope方法没有被ng-class调用
- 如何在HTML模板中使用Functional $scope方法而不使用ng-click
- Angularjs将$scope方法作为参数传递给另一个$scope方法