当前位置: 首页 > 面试题库 >

在兑现承诺之前就已提交指令

车思淼
2023-03-14
问题内容

我遇到了问题,我的指令只有在我的诺言得到解决后才能呈现其内容。我以为then()应该这样做,但是似乎没有用。

这是我的控制器:

// Generated by CoffeeScript 1.6.3
(function() {
  var sprangularControllers;

  sprangularControllers = angular.module('sprangularControllers', ['sprangularServices', 'ngRoute']);

  sprangularControllers.controller('productsController', [
    '$scope', '$route', '$routeParams', 'Product', 'Taxonomy', function($scope, $route, $routeParams, Product, Taxonomy) {
      Taxonomy.taxonomies_with_meta().$promise.then(function(response) {
        return $scope.taxonomies = response.taxonomies;
      });
      return Product.find($routeParams.id).$promise.then(function(response) {
        return $scope.currentProduct = response;
      });
    }
  ]);

}).call(this);

我的指令:

// Generated by CoffeeScript 1.6.3
(function() {
  var sprangularDirectives;

  sprangularDirectives = angular.module('sprangularDirectives', []);

  sprangularDirectives.directive('productDirective', function() {
    return {
      scope: {
        product: '='
      },
      templateUrl: 'partials/product/_product.html',
      link: function(scope, el, attrs) {
        console.log(scope);
        console.log(scope.product);
        return el.text(scope.product.name);
      }
    };
  });

}).call(this);

范围返回还可以,当我在开发工具中检查它时scope.product并没有定义,但是我想这是因为到我检查它时,诺言已经解决了吗?

console.log(scope.product) 但是,返回undefined。


问题答案:

因为您的值是异步填充的,所以您需要添加一个监视函数来更新绑定的元素

  link: function(scope, el, attrs) {
    scope.$watch('product', function(newVal) {
        if(newVal) { el.text(scope.product.name);}
    }, true);
  }

您还可以将很多复杂性转移到指令控制器中,并使用链接功能仅操作DOM。

true以第三个参数$watch引起了深刻的手表,因为你这种绑定指令的典范。

以下是一些带有示例的链接:
http : //www.ng-
newsletter.com/posts/directives.html

http://seanhess.github.io/2013/10/14/angularjs-directive-
design.html



 类似资料:
  • 问题内容: 我不明白…是我还是这是节点中的错误? 可以按预期进行: 这发出了警告: 我懂了 问题答案: 使用与承诺回报新希望(这就是所谓的链接)。因此,当您执行以下操作时: 您的最初承诺在哪里,您将在第1行上创建一个新的承诺(现在不再存在。我们称它为 )。因此,即使您使用with ,也不会处理上的拒绝,这解释了您在控制台上看到的消息。 为了避免出现此消息,您应该在第1行的新承诺中添加a

  • 问题内容: 在循环中使用/ 是否有任何问题?我试图遍历文件数组和每个文件的内容。 这段代码确实有效,但是这可能会出问题吗?我让某人告诉我,您不应该在这样的高阶函数中使用/ ,所以我只是想问一下这是否有问题。 问题答案: 确保代码确实有效,但是我很确定它不会执行您期望的功能。它只会触发多个异步调用,但此后函数会立即返回。 顺序阅读 如果要顺序读取文件, 则不能使用。只需使用现代循环即可,该循环将按预

  • 问题内容: 在我的应用程序中,我必须获取一些JSON数据并将其分配给数组,然后再加载页面。这是我使用CardService服务获取JSON的代码: 在控制器的resolve块中,我具有以下内容: 在实际的控制器中,我有以下内容: 问题是,服务中的fetchCards函数似乎在将JSON数据分配给cards变量之前就解决了诺言。这导致我的视​​图中加载了空白数据,直到刷新两次并很幸运为止。 我可以确

  • 问题内容: 我得到的输出正确,实际上,这两个操作被视为一个事务单元;如果一个失败,那么两个都会失败。 在此代码示例中:我正在进行以下交易 (1)插入(2)更新 我的处理方式是将数据库操作嵌套在.then内。我的问题是该代码是否偶然正确?我是Promise和Knex的新手。 这行得通,但是我觉得我仍然在做错事。寻找评论。 问题答案: 您需要从内部查询中返回一个Promise,以便将外链与此链接在一起

  • 问题内容: 我陷入了我认为应该直截了当的事情。我需要从三个不同的ajax调用中获取数据,组合并处理所有三个,并将结果数组显示给用户。 以最简单的形式,我的代码如下所示: 我知道我的变量分配给了Promise,而不是实际结果,并且http请求已传递到事件队列。如果我在这些后面加上可执行语句,则这些变量将是未定义的。我不明白如何等待这些诺言解决以继续处理它们。 我想立即添加以下代码: 问题是,我不能像

  • 问题内容: 我在这里尝试取消文件上传时遇到了一些情况。我所做的事情是说,如果用户单击“取消”按钮,则它将仅删除iframe,这样它就不会进入将文件上传到服务器并将数据插入数据库的页面。 现在,如果用户快速单击“取消”按钮,则可以正常工作,但我意识到的问题是,如果用户单击时间很晚,则有时无法及时删除iframe该文件刚刚在用户点击“取消”按钮之前上传。 因此,我的问题是,如果用户在单击“取消”按钮之