- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开始使用 Angular Material
并很难理解 $scope
.apply
功能的问题...我尝试通过调用 apply
来通知 UI 有关更改的信息,但失败并出现错误。我知道也有类似的问题,但就我而言,数据不是由 scope
存储的,而是由 Controller 实例存储的......
我还使用 TypeScript
来实现我的 Controller ;不确定,但这似乎很不常见,因为我发现的大多数示例代码都是基于 View 中的内联 Controller 实现。
我的 Controller 看起来像这样...
module MyApp {
export class MyController {
private scope: angular.IScope;
private http: angular.IHttpService;
public model: { data: SampleData } = { data: { } };
constructor($scope: angular.IScope, $http: angular.IHttpService) {
this.scope = $scope;
this.http = $http;
}
public querySampleData(): void {
const serviceEndpoint: string = "http://localhost:8080/api/";
var promise: ng.IHttpPromise<SampleData> = this.http.get(serviceEndpoint + "sample", { });
var callback: ng.IHttpPromiseCallback<SampleData> = (
data: SampleData,
status: number,
headers: angular.IHttpHeaderGetter,
config: angular.IRequestConfig) => {
this.scope.apply(() => {
this.model.data = data;
};
};
promise.success(callback);
}
}
export interface SampleData {
message? string;
}
}
Controller 提供了 querySampleData
方法,该方法从远程服务获取一些数据(它使用 IHttpService
进行异步 API 调用)。 View 通过以下方式使用 Controller ...
<html ng-app="app">
<body ng-controller="MyController as c">
<div>
<button ng-click="c.querySampleData()"
aria-label="Query sample data">Query sample data</button>
<p>{{c.model.data.message}}</p>
</div>
...
<script src="../scripts/app.js"></script>
<script type="text/javascript">
var app = angular.module("app", ["ngMaterial"]);
app.controller("MyController", [ "$scope", "$http", MyApp.MyController ]);
</script>
</body>
</html>
Controller 的初始化工作正常;所有依赖项都被正确注入(inject)到 Controller 中,并且与 querySampleData
方法的绑定(bind)也按预期工作(当我单击按钮时,该方法被调用)。如果我将接收到的数据分配给模型,则 UI 不会更新,因此我添加了对 $apply
方法的调用,以便通知 UI 有关更改的信息...这给了我提到的错误如上所述。
更新:
文档位于:https://docs.angularjs.org/error/$rootScope/inprog建议使用$timeout
代替$apply
来保证异步执行;当然,这修复了错误,但 UI 没有改变...
最佳答案
AngularJS Promise 已经在其回调中调用了 .apply()
(在后台)。您无法在回调中再次调用 .apply
,因为它们已经被 .applied,并且错误“In Progress”准确地说明了这一点。只需删除 .apply
调用,它就会起作用,除非您有更多错误。
关于javascript - $rootScope :inprog Action already In Progress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36316202/
我需要在我的 Angular JS Web 应用程序中切换 View 。 为了处理路由,我使用 $stateProvider,如下所示: .config(['$httpProvider', '$sta
我开始使用 Angular Material 并很难理解 $scope.apply 功能的问题...我尝试通过调用 apply 来通知 UI 有关更改的信息,但失败并出现错误。我知道也有类似的问题,但
我尝试在刷新数据后将更改应用于 ui 网格,但出现此错误: angular.js:13236 Error: [$rootScope:inprog] $apply already in prog
我正在尝试编写一个将给定模板和范围呈现为字符串的服务。 这是代码: utilModule.factory('CompilerService', ['$compile', '$templateCache
我收到 angularjs [$rootScope:inprog] 错误。 错误:[$rootScope:inprog] http://errors.angularjs.org/1.2.7/$root
我有输入字段: 焦点事件绑定(bind)到此方法: scope.focus = function (e, names) { scope.dateSet = false;
在我的项目中,我尝试上传图像,将其读取为 dataURL 并将其存储到我的数据库中。 我的 HTML ng-click 使用 true 或 false 作为参数调用这些方法(一个执行 body 图像,
我正在尝试在模型中的属性更改时发送表单(使用指令)(因此我观察属性),但是当我触发提交事件时,我收到错误:“错误:[$rootScope :inprog] $digest already in pro
有没有一种方法可以在下面的代码片段中应用范围而不引发错误? (并且没有像 try/catch、$timeout 或硬编码 BONJOUR 这样的黑客和解决方法) 如果没有 SCOPE.$apply()
我对 Angular 不是很好,但我知道一些基础知识。现在,我有接入点并想将它们分配给建筑物。我可以用 选择这座建筑.我写了一个简单的 Controller ,但它不会工作。我做错了什么,我找不到解
我为此搜索并尝试了很多方法,我想也许我只是做错了。 我有一个单页应用程序,它具有非常相似的 DOM 片段,仅通过从服务输入到它们的数据来区分。每个 DOM 片段都有不同的 Web 服务。 我的 HTM
我正在尝试更新属于 $scope 的页面上的一些文本。但我不断收到此错误: Error: [$rootScope:inprog] [http://errors.angularjs.org/1.2.15
AngularJS 1.5.9 出现了一个非常奇怪的异常 [$rootScope:inprog] null already in progress 以下是引发此异常的源代码: function beg
我试图在按下一个键时触发一个按钮的点击。我正在使用 triggerHandler 函数执行此操作,但这会导致上述错误。我想我一定创建了某种循环引用/循环,但我看不到在哪里。 这是我的 HTML: 这
我正在显示一个按钮,单击该按钮会定位一个输入元素 一旦找到该元素(使用 jquery),我就会尝试发出单击。虽然这确实有效(选择文件对话框打开),但我还在 angularjs 中收到 $rootS
我经常收到“$apply已经在进行中”的错误代码: public addFile(): void { if (window["File"]) { $("#fileSelecto
关于此错误的其他帖子总是包括有人在不使用安全应用的情况下尝试 $apply,但在我的示例中并非如此。我的函数成功返回了我从 API 请求的数据,但我无法清除这个错误,这让我发疯。 每次在 $http
我想创建自定义文件上传组件。我在 html 中做了以下代码 HTML 代码 // don`t want to render default Browse JS 代码 $scope.clickUploa
我是一名优秀的程序员,十分优秀!