相关疑难解决方法(0)

AngularJS:在调用$ scope时防止错误$ digest正在进行中.$ apply()

我发现自从以角度构建应用程序后,我需要手动将页面更新到我的范围.

我知道这样做的唯一方法是$apply()从我的控制器和指令的范围调用.这个问题是它不断向控制台抛出一个错误:

错误:$ digest已在进行中

有谁知道如何避免这个错误或以不同的方式实现相同的事情?

angularjs angularjs-scope angularjs-digest

832
推荐指数
14
解决办法
42万
查看次数

AngularJS:$ observe和$ watch方法之间的区别

我知道,无论WatchersObservers就将计算在东西$scope在AngularJS变化.但无法理解两者之间究竟有什么区别.

我最初的理解是Observers为角度表达式计算,这是HTML一侧的条件,Watchers执行$scope.$watch()函数时执行.我在想什么?

javascript angularjs

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

如何在Angular 1.5组件中等待绑定(没有$ scope.$ watch)

我正在写一个Angular 1.5指令,我遇到了一个令人讨厌的问题,试图在绑定数据存在之前对其进行操作.

这是我的代码:

app.component('formSelector', {
  bindings: {
    forms: '='
  },
  controller: function(FormSvc) {

    var ctrl = this
    this.favorites = []

    FormSvc.GetFavorites()
    .then(function(results) {
    ctrl.favorites = results
    for (var i = 0; i < ctrl.favorites.length; i++) {
      for (var j = 0; j < ctrl.forms.length; j++) {
          if (ctrl.favorites[i].id == ctrl.newForms[j].id) ctrl.forms[j].favorite = true
      }
     }
    })
}
...
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在进行AJAX调用以获取收藏夹,然后根据我的绑定表单列表进行检查.

问题是,即使在填充绑定之前,承诺仍在实现......所以当我运行循环时,ctrl.forms仍未定义!

不使用$ scope.$ watch(这是1.5组件的吸引力的一部分)我如何等待绑定完成?

javascript components angularjs

35
推荐指数
3
解决办法
3万
查看次数

在$ digest之后推迟angularjs监视执行(提升DOM事件)

我有一个触发DOM事件的手表:

scope.$watch(function() { return controller.selected; }, function(selected) {
    if (selected) {
        $input.trigger('focus');
    }
});
Run Code Online (Sandbox Code Playgroud)

问题是我在'焦点'上有一个处理程序scope.$apply.

$input.bind('focus', function() {
    scope.$apply(function() { controller.focused = true; });
});
Run Code Online (Sandbox Code Playgroud)

因此当我$watch从内部触发$digest它时会导致错误,因为它试图触发另一个错误$digest.

我的解决方法是将触发器放入$timeout.

scope.$watch(function() { return controller.selected; }, function(selected) {
    if (selected) {
        $timeout(function() { $input.trigger('focus'); });
    }
});
Run Code Online (Sandbox Code Playgroud)

这工作......到目前为止.这是处理这个问题的正确方法吗?我不确定这是否能抓住每一个案例,并且想知道是否有一个有角度的批准方式让一段代码推迟到摘要之后.

谢谢!

angularjs angularjs-directive

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

使用AngularJS的$ timeout时,默认延迟是多少?

在非常简短的AngularJS $ timeout文档页面上,'delay'参数被声明为可选.当使用$ timeout而没有指定延迟时,我注意到仍然会应用延迟.

任何人都可以告诉我,当论证被隐含时,延迟分配了多少时间?

javascript timeout angularjs

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

$compile 编译的 ngRepeat 不起作用

我需要动态编译 html 并将其作为文本从函数传递。所以,我有这个代码(用于调试目的的简化版本):

angular.module('app', [])
  .run(function($rootScope, $compile){
    var data = ["1","2"];
    var html  =
        '<div>' +
        '<ul>' +
        '<li ng-repeat="score in data">{{score}}</li>' +
        '</ul>'+
        '</div>';

    var el = angular.element(html);

    $rootScope.data = data;

    var result = $compile(el)($rootScope);

    console.log(result.html());
  })
Run Code Online (Sandbox Code Playgroud)

结果只是:

<ul><!-- ngRepeat: score in data --></ul> 
Run Code Online (Sandbox Code Playgroud)

所以,看起来 ngRepeat 不会“重复”“li”元素。

为什么?

JsFiddle: http: //jsfiddle.net/yoorek/K4Cmk/

(我知道 DOM 操作应该在指令等中,并且我知道如何以其他方式进行操作,但我需要理解为什么这不起作用)

angularjs

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