Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ngSrc是在ngIf导致不必要的http请求之前计算的_Javascript_Angularjs - Fatal编程技术网

Javascript ngSrc是在ngIf导致不必要的http请求之前计算的

Javascript ngSrc是在ngIf导致不必要的http请求之前计算的,javascript,angularjs,Javascript,Angularjs,当你写这样的东西时: 如果image.name=nullAngular将首先添加标记并计算src。浏览器将对不存在的img/_img.pngw发出http请求。然后angular将在解析ngIf指令后删除标记。解决这个问题最简单的方法是什么?我认为它是ngSrc和ngIf的完美用例 编辑 在当前不稳定的1.2.0-rc.2版本中,问题得到了解决,一切都按照它应该做的方式工作。在当前的stable 1.0.8中,您甚至不能使用三元运算符。您可以通过一个简单的指令这样做 以下是HTML: <

当你写这样的东西时:


如果
image.name=null
Angular将首先添加标记并计算src。浏览器将对不存在的
img/_img.png
w发出http请求。然后angular将在解析ngIf指令后删除标记。解决这个问题最简单的方法是什么?我认为它是ngSrc和ngIf的完美用例

编辑


在当前不稳定的1.2.0-rc.2版本中,问题得到了解决,一切都按照它应该做的方式工作。在当前的stable 1.0.8中,您甚至不能使用三元运算符。

您可以通过一个简单的指令这样做

以下是HTML:

<!DOCTYPE html>
<html ng-app="App">

  <head>
    <link rel="stylesheet" href="style.css">
    <script src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script>
    <script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
    <script src="script.js"></script>
  </head>

  <body ng-controller="MyCtrl">
    <h1>Hello Plunker!</h1>
    <img ng-directive />
  </body>

</html>

以下是完整的工作示例:

您不需要使用
ng if
指令来执行此操作。只需在表达式中进行三元运算符测试。差不多


它应该会起作用。请参阅my plunker

生成一个指令,该指令将检查ng,如果名称不为null,则编译ng src。如果你想谢谢你的快速回答,我就试试扑通一声。这对我来说已经足够好了。不管怎样,我在谷歌上搜索了一下,没有发现是否可以创建一个优先级很高的指令来运行它所使用的标记中定义的其他指令?你在directvie上有一个优先级属性。Tkae关心ng src属性是否设置不管怎样,您是否在ng src中添加了一个条件,这是唯一的区别,如果这不是您的问题,请接受:)是的,但ng src属性已设置。。。这是唯一的区别。如果ng src为空,那么就没有对服务器的调用。我知道,但这只是因为你没有任何属性,这只是代码样式而已:)是的,它更短,这次我不需要指令,因为它只是我代码中的一个位置。如果我有更多的地方,我会创建指令,因为它提高了可读性等等。
angular.module('App', [])
  .controller('MyCtrl', function($scope){
     $scope.image = {name: "myName"};
  });

angular.module('App')
  .directive('ngDirective', function($compile){
    return {
      link: function(scope, element, attrs){
        if(scope.image.name != null){
          $compile($(element).attr('ng-src', 'http://lauterry.github.io/slides-prez-angular/img/angularjs.png'))(scope);
        }
      }
    }
  });