指令不更新我的范围
Directive do not update my scope
我在应用程序周围使用一个作用域来显示一个微调器,同时执行异步请求。
该范围为:$scope.showSpinner = true / false
现在我正在处理一个指令,代码是这样的:
'use strict';
angular.module('orders').directive('resetOrder', ['$rootScope', function ($rootScope) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
var order_id = attrs.resetOrder;
element.bind('click', function (event) {
event.stopPropagation();
alertify.confirm(
'Warning!',
'Are you sure you wish to RESET order id: ' + order_id + '?',
function () {
scope.showSpinner = true;
[ ... ]
}, function () {
return;
}
);
});
}
};
}]);
scope.showSpinner
没有传播,按下重置按钮后我看不到微调器处于活动状态。
到目前为止我尝试过:
我将$scope
转换为$rootScope
,不起作用。我添加了scope.$apply()
甚至$rootScope.$apply()
,不起作用。我把它包在$timeout
里,没有工作。我创建了一个范围:{ showSpinner: '=' },没有工作。
我无法摆脱这个问题。我做错了什么?
以下是我在 HTML 中添加指令的方式:
<button reset-order="{{ order.id }}">
提前感谢您的帮助。
当您处于 alertify.conconfirm 的回调中时,您处于角度上下文之外,因此不会反映对范围属性的任何更改。
尝试:
scope.$apply(function () {
scope.showSpinner = true;
});
也许是因为您的指令存在致命缺陷。在给定范围内只能使用它一次。每次都需要创建一个不同的控制器才能重用指令。这显然不是一个很好的解决方案。
您希望能够做的是将指令内部的作用域与外部作用域分开,然后将外部作用域映射到指令的内部作用域。您可以通过创建我们所说的隔离作用域来执行此操作。为此,您可以使用指令的 scope 选项。
https://docs.angularjs.org/guide/directive
隔离范围后,将观察程序添加到指令中以监视更改。例:
scope.$watch('showSpinner', function (newValue, oldValue) {
if (newValue == oldValue) {
return;
}
//do something
});
相关文章:
- 无法在我的示例plunker中使用继承/隔离的范围概念
- 为什么如果我的函数中的范围被 javascript 解释器完全忽略了
- 我怎样才能重写这个函数,这样我就不会'不必显式地键入范围内的每个IP地址
- Sonarqube不会从LCOV检索我的JavaScript覆盖范围
- 为什么在使用箭头键时,打开更改功能不适用于我的范围滑块
- $apply在angularJs中没有更新我的范围变量
- 我的弹性查询中出错 - 范围返回错误的请求
- 无法访问父范围内的属性,但是我可以通过该属性链查看
- 为什么我的用户范围的自定义维度会根据过去的匹配而发生变化
- JavaScript 中的范围(我认为?!)挑战
- 在角度中,为什么我的 ng-show 不更新以反映当前范围
- 为什么我的范围在 angularjs 和 d3js 上的$http函数中丢失了
- 我的JavaScript范围有什么问题
- 指令不更新我的范围
- 我在从我的指令 Angular 访问控制器的范围时遇到问题
- 当我不更改范围中的任何内容时,AngularJS 会重新评估绑定
- 为什么我的范围选择器在我的谷歌地图API3/jQuery移动应用程序中不起作用
- 我可以'我没有针对我的闭包中的正确范围
- 被困在javascript关闭范围的边缘地带,直到我的大脑转向炒鸡蛋
- 没有jQuery的分页.如何选择具有相同类的元素范围?我的逻辑说得通吗?