繁体   English   中英

带有 ng-if 的指令未在 Angular.js 中呈现

[英]directive with ng-if not rendering in Angular.js

每当我得到搜索结果时,我都会尝试呈现指令。 我的计划是保持 scope 变量algoliaSearch最初为false ,每当我返回搜索结果时,我将其更改为true 然后在我看来,我尝试根据变量的值来呈现指令。

  .directive('searchResults', function () {
    return {
      restrict: 'E',
      templateUrl: 'app/search/directives/templates/searchResults.template.html',
      controller: ['$scope', 'AlgoliaSearchService', function ($scope, AlgoliaSearchService) {
        $scope.hits = [];
        $scope.nbHits = null;
        $scope.algoliaSearch = false;

        AlgoliaSearchService.on('result', results => {
          $scope.algoliaSearch = true;
          $scope.hits = results.hits;
          $scope.nbHits = results.nbHits;
          console.log($scope.algoliaSearch)
        });

      }]
    };
  })

在我看来,当我得到搜索结果时,我想呈现指令

<search-results ng-if="algoliaSearch"></search-results>

但这似乎不起作用。 它不会在搜索时呈现任何内容,甚至console.log($scope.algoliaSearch)也不会在控制台上打印任何内容。 但是,如果我使用喜欢

<search-results></search-results>

或者

<search-results ng-if="true"></search-results>

然后它呈现并且console.log工作,但这不是我想要的方式。
我的问题是为什么它不根据我的 scope 变量有条件地呈现指令。 一旦我得到搜索结果,我想让它有条件地呈现。
任何帮助深表感谢。

您的指令 html <search-results ng-if="algoliaSearch"></search-results>没有显示,因为它甚至在呈现和执行指令代码之前就在 $scope algoliaSearch中寻找变量。 不仅该变量不在 $scope 中,而且在 ng-if 为真之前它也不可用。

要解决这个问题,您最好的选择是将您的 ng-if 更改为 $scope 中的内容,或者更好的是,只需使用<search-results></search-results>指令,并在...searchResults.template.html包含 boolean 开关,类似于

<div class='search-results' ng-if='algoliaSearch'>
  <div ng-repeat='....'>
    <!-- etc -->

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM