AngularJs app

时间:2017-12-12 13:55:43

标签: javascript angularjs

在Angular 1.x控制器中有这样的结构是否正确,另一个$ timeout中包含$ timeout?

$timeout(function () {
    $timeout(function () {
        callbackFn($event);
    });
});

更具体一点:

我在指令链接函数中超时,在指令控制器中有另一个超时。现在,每次呈现指令时,它们都以随机顺序执行。我找到了两个嵌套超时的解决方案,但是我不确定是否可以这样使用它们。

示例:https://codepen.io/neptune01/pen/jYOGPO

1 个答案:

答案 0 :(得分:2)

要处理请求两个或更多函数(在您的情况下,在指令和控制器 [第一个指令,然后是控制器] 之间),您可以在它们之间传递Model。

更多解释

  

在应用程序中使用模型是强大的策略之一,可以让您的应用变得灵活。

例如

$scope.model = { anything: false }

如果我们尝试在我们的指令中传递此$scope,那么我们在控制器和指令之间有两种方式绑定,我将向您展示它在样本中的工作方式。

<强> app.js

var app = angular.module('app', []);

app.directive('cDir', function($timeout){
return {
  restrinct: 'E',
  controller: 'appCtrl',
  template: 'cdir template',
  scope: {
    ready: '='
  },
  link: function(scope){
    console.log('t1');
    scope.ready = true;
  }
}})

app.controller('appCtrl', ['$scope', function($scope) {
    $scope.ready = false;
    $scope.$watch('ready', function(isReady){
      if(isReady){
         console.log('t2');
      }
    })
}]);

查看

<div ng-app="app">
  <c-dir ready="ready"></c-dir>
</div>

我们将$scope.ready定义为指令的模型,console.log('t2')在指令readytrue时显示;我们使用$watch作为$scope的收听者。