如何使用角度指令控制器动态单击复选框
How to dynamically click a checkbox using angular directive controller
这是我的html
<li
ng-repeat="myElement in myList">
<input
type="checkbox" value="myElement"
ng-model="checkState"
ng-click="myDirective.updateSelectedElement(myElement, checkState)"/>
<div>
{{myElement.name}}
</div>
</li>
我有一个$broadcast
事件,这样
$scope.$on('myEvent', function(event, data){
// Change the checkbox state for the checkbox that have the same name in data
})
问题是,由于我的复选框都是孤立的作用域,我无法访问它,有没有办法访问具有特定myElement.name
的复选框
感谢
通过rootscope进行操作将解决问题
app.controller("ControllerA", ["$scope", "$rootScope", function($scope, $rootScope){
$rootScope.$broadcast("myEvent");
}]);
app.controller("ControllerB", ["$scope", "$rootScope", function($scope, $rootScope){
$rootScope.$on('myEvent', function(event, data){
$scope.checkState = true;
})
}]);
下面是我编写的代码的一个工作示例,展示了如何使用事件从指令外部以编程方式检查和取消检查复选框。我在这个例子中使用了按钮,但您也可以从控制器内部调用这些方法。
Plunker 中的示例
此外,作为最佳实践,如果您从rootScope调度事件并在rootScope上侦听它,请使用$emit而不是$broadcast,以便事件在rootScope开始和结束,而不会在作用域链上广播。
角度代码
angular.module('app', [
]).controller('MainController', ['$scope', '$rootScope', function ($scope, $rootScope) {
$scope.list = [{label: 'Camaro'}, {label: 'Chevette'}, {label: 'Corvette'}];
$scope.checkItem = function (label, status) {
$rootScope.$emit('checkItemEvent', {label: label, check: status});
};
}])
.directive('checkboxDirective', function ($rootScope) {
return {
restrict: 'AE',
template: '<input type="checkbox" ng-model="item.checkState"/><span>{{item.label}}</span>',
require: 'ngModel',
scope: {
item: '=ngModel'
},
link: function ($scope) {
console.log('$scope.item', $scope.item);
$rootScope.$on('checkItemEvent', function (event, data) {
console.log('data', data);
if (data.label === $scope.item.label) {
$scope.item.checkState = data.check;
}
});
}
};
});
HTML
<!DOCTYPE html>
<html ng-app="app">
<head>
<link rel="stylesheet" href="style.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.js"></script>
<script src="script.js"></script>
</head>
<body ng-controller="MainController">
<h1>Checkbox demo</h1>
<ul>
<li ng-repeat="item in list">
<checkbox-directive ng-model="item"></checkbox-directive>
</li>
</ul>
<div>
<button ng-click="checkItem('Corvette', true)">Check Corvette</button>
<button ng-click="checkItem('Corvette', false)">Uncheck Corvette</button>
</div>
</body>
</html>
相关文章:
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- 如何将单击事件添加到JQuery中动态添加的元素中
- 使用jquery插入动态HTML后,单击不起作用
- 如何在单击单元格中的链接值时动态更改表行背景色
- 在动态crm 2011中,右键单击已完成活动的只读文本时,您是否出现错误
- 如何使用单击属性和工具提示动态创建表格单元格,该工具提示将超链接到页面
- 通过动态创建数组名称在单击函数中引用 javascript 数组
- 无法在 jquery 中的单击事件上生成动态输入字段
- 动态.js单击画布外的按钮时从画布中删除图像
- 单击动态添加的按钮时如何触发 aspx 脚本
- 如何使动态插入的 html 对象可单击
- 如何使用角度指令控制器动态单击复选框
- 如何使用Angularjs动态单击文本框
- 列表中项的动态单击函数指令.快到了
- 如何动态单击标签以仅检查整行
- 按钮的动态单击事件
- 如何在单击按钮后再次动态单击按钮(将单个单击视为双击)
- 如何动态单击所有列表项,而不显示其默认行为的结果,但不可见地加载其内容
- 动态单击复选框并在列表中添加电子邮件地址,并使用javascript删除重复的电子邮件地址
- 通过在特定坐标上动态单击来单击iFrame