在指令中使用$watch的单个值对范围进行角度更新
Angular update scope with individual values for $watch inside directive
假设我有两个可拖动元素
<div draggable enabled="false"></div>
<div draggable enabled="false"></div>
要启用/禁用元素,我使用以下指令:
App.directive('draggable', function() {
return {
restrict:'A',
link: function(scope, element, attrs) {
element.draggable();
scope.$watch('enabled', function (val) {
element.draggable(val === true ? 'enable' : 'disable');
});
}
};});
我设置了一个$watch,看起来可以是真/假。现在我想使用我的控制器来更改"enabled"属性。
App.controller('TypeAheadController',function($scope){
//some code
$scope.enabled = true;
});
但是,当我使用它时,所有可拖动的元素都会被引用。因此,它们都被启用或禁用。我认为这很奇怪,因为我希望$watch在每个可拖动元素的范围内查找启用的值。我的目标是单独启用/禁用可拖动元素。因此,我需要一种方法来设置/引用控制器中每个可拖动元素的enabled属性。
您可以更改指令以拥有自己的作用域:
App.directive('draggable', function () {
return {
restrict: 'A',
scope: {
enabled: '='
},
link: function (scope, element, attrs) {
element.draggable();
scope.$watch('enabled', function (val) {
element.draggable(val === true ? 'enable' : 'disable');
});
}
};
});
要让您的控制器控制每个单独的指令,您需要对每个指令进行相应的配置:
App.controller('TypeAheadController', function ($scope) {
$scope.draggableItems = [{enabled:true},{enabled: true}];
});
以及在您的HTML:中
<div ng-repeat="draggable in draggableItems" draggable enabled="draggable.enabled"></div>
相关文章:
- 如何通过数组更新角度子范围
- ngDialog-弹出窗口未更新范围变量
- 如何在范围值更改时使用 angularJs 更新 UI
- 正在更新起始日期角度日期范围选择器中的日期选择
- AngularJS范围没有更新
- Angular JS-文本框未在独立范围内更新
- 可以't在quizz页面范围问题上用最终分数更新变量
- 无法使用编程加载的属性更新范围滑块.js
- 角度文件上传更新范围在完成项上
- Angularjs 更新 setTimeout 中的范围变量不起作用
- 如何不断更新 d3 图中 x 轴的范围
- 离子范围值未更新 在$state之间导航
- AngularJS摘要周期偶尔无法更新范围
- Angular:从工厂更新范围不起作用
- 根据输入范围更新显示的文本量
- 根据输入范围更新显示的文本量
- 角度.js在范围更新后运行 ng-show 函数
- angular.js指令双向绑定范围更新
- 角度指令和范围更新让人疯狂
- 角,Apache - $范围更新,但需要点击某处显示在界面上