相关疑难解决方法(0)

AngularJS中的$ evalAsync和$ timeout之间有什么区别?

我一直在使用AngularJS一段时间,并且发现需要每隔一段时间使用$ timeout(似乎通常是初始化一个jQuery插件).

最近,我一直在努力更好,更深入地了解摘要周期,我遇到了$ evalAsync函数.

似乎该函数产生类似的结果$timeout,只有你没有给它延迟.每次我使用$timeout它都会延迟0,所以现在我想知道我是否应该使用它$evalAsync.

这两者之间是否存在根本差异?你会用哪种情况比另一种情况多?我想更好地了解何时使用哪一个.

angularjs angularjs-timeout

178
推荐指数
2
解决办法
6万
查看次数

$ apply已在进行中错误

堆栈跟踪:

Error: $apply already in progress
at Error (<anonymous>)
at beginPhase (file:///android_asset/www/built.min.js:7:22740)
at Object.Scope.$apply (file:///android_asset/www/built.min.js:7:25967)
at navigator.geolocation.getCurrentPosition.that (file:///android_asset/www/built.min.js:13:8670)
at Object.geolocation.getCurrentPosition (file:///android_asset/www/plugins/org.apache.cordova.core.geolocation/www/geolocation.js:122:13)
at Object.getCurrentPosition (file:///android_asset/www/built.min.js:13:8589)
at Object.getCurrentPosition (file:///android_asset/www/built.min.js:13:8277)
at Object.getCurrentCity (file:///android_asset/www/built.min.js:13:8941)
at Object.$scope.locateDevice (file:///android_asset/www/built.min.js:13:10480)
at file:///android_asset/www/built.min.js:7:12292:7
Run Code Online (Sandbox Code Playgroud)

请参阅此代码http://pastebin.com/B9V6yvFu

    getCurrentPosition: cordovaReady(function (onSuccess, onError, options) {

        navigator.geolocation.getCurrentPosition(function () {
            var that = this,
                args = arguments;

            if (onSuccess) {
                $rootScope.$apply(function () {
                    onSuccess.apply(that, args);
                });
            }
        }, function () {
            var that = this,
                args = arguments;
            if (onError) {
                $rootScope.$apply(function () { …
Run Code Online (Sandbox Code Playgroud)

angularjs cordova angularjs-digest

129
推荐指数
6
解决办法
17万
查看次数

为什么使用if(!$ scope.$$ phase)$ scope.$ apply()反模式?

有时我需要$scope.$apply在我的代码中使用,有时它会抛出"正在进行的摘要"错误.所以我开始找到解决这个问题的方法并找到了这个问题:AngularJS:在调用$ scope时预防错误$ digest.$ apply().但是在评论中(以及角度维基上),您可以阅读:

不要做(!$ scope.$$阶段)$ scope.$ apply(),这意味着你的$ scope.$ apply()在调用堆栈中不够高.

所以现在我有两个问题:

  1. 为什么这是一个反模式呢?
  2. 我怎样才能安全地使用$ scope.$ apply?

防止"正在进行摘要"错误的另一个"解决方案"似乎是使用$ timeout:

$timeout(function() {
  //...
});
Run Code Online (Sandbox Code Playgroud)

这是要走的路吗?它更安全吗?所以这是一个真正的问题:如何完全消除"摘要已经在进行中"错误的可能性?

PS:我只使用$ scope.$ apply适用于非同步的非angularjs回调.(据我所知,你必须使用$ scope.如果你想要应用你的更改,请申请$)

angularjs angularjs-scope

91
推荐指数
4
解决办法
5万
查看次数

AngularJS app中的$ timeout未定义错误

我有以下代码:

app.factory('Position', ['$timeout', function() {

    var position = {
        latitude: 44,
        longitude: 26
    };

    console.log("Timeout started");

    $timeout(function() {
        position.latitude += 15;
        position.longitude += 15;
    }, 2000);

    return position;
}]);
Run Code Online (Sandbox Code Playgroud)

我进入$timeout not definedJavascript控制台.我没有正确地注入服务的依赖吗?

javascript angularjs

45
推荐指数
1
解决办法
4万
查看次数

什么是用于角度的$$(双美元符号)?

我正在看一下角度1.2源代码,我只是好奇为什么有些函数以两个美元符号为前缀.这是某种惯例吗?

javascript angularjs

44
推荐指数
2
解决办法
2万
查看次数

错误:$ digest已在进行中

我试图打电话时遇到这个错误

        function MyCtrl1($scope, $location, $rootScope) {
      $scope.$on('$locationChangeStart', function (event, next, current) {
        event.preventDefault();
        var answer = confirm("Are you sure you want to leave this page?");
        if (answer) {
          $location.url($location.url(next).hash());
          $rootScope.$apply();
        }
      });
    }

MyCtrl1.$inject = ['$scope', '$location', '$rootScope'];
Run Code Online (Sandbox Code Playgroud)

错误是

Error: $digest already in progress
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angularjs-directive

29
推荐指数
2
解决办法
7万
查看次数

AngularJS Scope在异步调用后不在视图中更新

在向API发出请求时,我无法在前端更新我的示波器.在后端我可以看到我的$ scope变量的值正在改变,但这并没有在视图中反映出来.

这是我的控制器.

Controllers.controller('searchCtrl', 
 function($scope, $http, $timeout) {
   $scope.$watch('search', function() {
      fetch();
   });

 $scope.search = "Sherlock Holmes";

 function fetch(){
   var query = "http://api.com/v2/search?q=" + $scope.search + "&key=[API KEY]&format=json";
    $timeout(function(){
      $http.get(query)
      .then(function(response){ 
        $scope.beers = response.data; 
        console.log($scope.beers);
      });
    });  
 }
});
Run Code Online (Sandbox Code Playgroud)

这是我的HTML的片段

<div ng-if="!beers">
  Loading results...
</div>
<p>Beers: {{beers}}</p>
<div ng-if="beers.status==='success'">

  <div class='row'>
    <div class='col-xs-8 .col-lg-8' ng-repeat="beer in beers.data track by $index" ng-if="beer.style">
    <h2>{{beer.name}}</h2>          
    <p>{{beer.style.description}}</p>
    <hr>
    </div>
  </div>
</div>

<div ng-if="beers.status==='failure'">
  <p>No results found.</p>
</div>
Run Code Online (Sandbox Code Playgroud)

我尝试了几种解决方案,包括使用$ scope.$ apply(); 但这只会产生常见错误

错误:$ digest已在进行中 …

scope asynchronous angularjs

14
推荐指数
2
解决办法
1万
查看次数

Angular的未记录功能有哪些?

Angular文档缺少一些东西.有人可以总结一下未记录的功能吗?

angularjs

12
推荐指数
1
解决办法
5363
查看次数

AngularJS和Webpack集成

我正在寻找一些帮助使用webpack的大型AngularJS应用程序.我们正在使用基于功能的文件夹结构(每个功能/页面都有一个模块,它们有控制器,指令).我已成功配置webpack以使其与Grunt一起工作,Grunt生成一个单独的捆绑包.我想创建一个块作为一个大型应用程序,我们想异步加载模块(页面/功能)工件.

我正在浏览一些'code splitting'使用require([deps],fn )语法的webpack示例.但是我无法得到懒散的块.首先,我不知道究竟在哪里,我需要在AngularJS将用户路由到下一页之前导入这些块.我正在努力寻找明确的责任分离.

是否有人向我指出一个示例AngularJS应用程序,其中webpack用于在每个路由后异步加载控制器/指令/过滤器?

我关注的链接很少: 我应该使用Browserify或Webpack来延迟加载1.x https://github.com/petehunt/webpack-howto#9-async-loading http://dontkry.com中的依赖项/posts/code/single-page-modules-with-webpack.html

javascript java lazy-loading angularjs webpack

9
推荐指数
1
解决办法
8321
查看次数

嵌套ng-include的角度问题

我使用嵌套时遇到Angularjs问题ng-include$compile功能.这是错误:

Error: [$injector:unpr] Unknown provider: $rootElementProvider <- $rootElement <- $location <- $anchorScroll <- ngIncludeDirective
Run Code Online (Sandbox Code Playgroud)

我想,我必须$rootElementProvider在编译流程中注入某个地方,但我不知道如何.

这是我的问题的一个问题:http ://plnkr.co/edit/K8iayGXGLx5QwHNNiLZ1?p=preview

所有代码都是必需的,我不能使用指令和控制器,模板也需要像这样缓存.此外,如果有人也知道如何摆脱已经运行的$timeout服务,$digest我将非常感激.

javascript angularjs

6
推荐指数
1
解决办法
431
查看次数