AngularJS 表达式在带有 JSF 的 ng-src 中无法正常工作
AngularJS Expression Not Working Correctly in ng-src with JSF
angularjs 模块。 products
数组包含 2 个产品对象,它们将作为控制器的 属性 添加。
(function () {
var app = angular.module('myApp', []);
var products = [
{
title: "Dummy Title 1",
description: "Dummy Description 1",
image: "dummy_image_1.jpg"
},
{
title: "Dummy Title 2",
description: "Dummy Description 2",
image: "dummy_image_2.jpg"
}
];
app.controller('myController', function () {
this.products = products;
});
})();
JSF 页面,如果我用 images/dummy_image_1.jpg
等实际图像文件名删除 images/{{product.image}}
,图像会显示,但如果我改用 angularjs 表达式,则什么也没有显示。请注意,除了 {{product.image}}
之外,循环中的其他表达式也有效。如果我在其他地方添加 {{product.image}}
,那么它会正确显示文件名,但在 ng-srs
中使用,如果我查看 html,它不会打印任何内容。不知道为什么。
<h:form>
<div class="container" ng-controller="myController as controller">
<div class="row">
<div class="col-sm-offset-10">
Hello <b><h:outputText value="#{user.userName}"/></b><br/>
<h:commandLink action="cart" value="Cart"/>
</div>
</div>
<hr/>
<div ng-repeat="product in controller.products">
<div class="row">
<div class="media">
<div class="media-left">
<img class="media-object" ng-src="images/{{product.image}}"/> <!--If I replace that expression with a the image file name, it shows the image -->
</div>
<div class="media-body">
<h4 class="media-heading">{{product.title}}</h4>
<span class="caption">{{product.description}}</span><br/>
<h:commandLink action="cart" value="Add to cart"/>
</div>
</div>
</div>
</div>
</div>
</h:form>
有时使用插值 {{}}
不会评估和更新属性值(这通常发生在 IE 中)。执行此操作的方法是使用 ng-src
指令和插值 {{}}
这将在评估插值指令后将 src
添加到 img
标记。
标记
<div class="media-left">
<img class="media-object" ng-src="{{'images/'+product.image}}"/>
<!--If I replace that expression with a the image file name, it shows the image -->
</div>
备选
另一种方法是使用 ng-attr
指令添加 attribute
并计算 value
。这将确保您每次都将插值分配给 ng-attr
中提到的 attribute
(ng-attr 之后的部分被视为要添加的属性,假设我们有 ng-attr-value="{{someVar}}"
然后 angular 将评估 someVar
然后将该值分配给该元素的 value 属性。
标记
<div class="media-left">
<img class="media-object" ng-attr-src="{{'images/'+product.image}}"/>
<!--If I replace that expression with a the image file name, it shows the image -->
</div>
angularjs 模块。 products
数组包含 2 个产品对象,它们将作为控制器的 属性 添加。
(function () {
var app = angular.module('myApp', []);
var products = [
{
title: "Dummy Title 1",
description: "Dummy Description 1",
image: "dummy_image_1.jpg"
},
{
title: "Dummy Title 2",
description: "Dummy Description 2",
image: "dummy_image_2.jpg"
}
];
app.controller('myController', function () {
this.products = products;
});
})();
JSF 页面,如果我用 images/dummy_image_1.jpg
等实际图像文件名删除 images/{{product.image}}
,图像会显示,但如果我改用 angularjs 表达式,则什么也没有显示。请注意,除了 {{product.image}}
之外,循环中的其他表达式也有效。如果我在其他地方添加 {{product.image}}
,那么它会正确显示文件名,但在 ng-srs
中使用,如果我查看 html,它不会打印任何内容。不知道为什么。
<h:form>
<div class="container" ng-controller="myController as controller">
<div class="row">
<div class="col-sm-offset-10">
Hello <b><h:outputText value="#{user.userName}"/></b><br/>
<h:commandLink action="cart" value="Cart"/>
</div>
</div>
<hr/>
<div ng-repeat="product in controller.products">
<div class="row">
<div class="media">
<div class="media-left">
<img class="media-object" ng-src="images/{{product.image}}"/> <!--If I replace that expression with a the image file name, it shows the image -->
</div>
<div class="media-body">
<h4 class="media-heading">{{product.title}}</h4>
<span class="caption">{{product.description}}</span><br/>
<h:commandLink action="cart" value="Add to cart"/>
</div>
</div>
</div>
</div>
</div>
</h:form>
有时使用插值 {{}}
不会评估和更新属性值(这通常发生在 IE 中)。执行此操作的方法是使用 ng-src
指令和插值 {{}}
这将在评估插值指令后将 src
添加到 img
标记。
标记
<div class="media-left">
<img class="media-object" ng-src="{{'images/'+product.image}}"/>
<!--If I replace that expression with a the image file name, it shows the image -->
</div>
备选
另一种方法是使用 ng-attr
指令添加 attribute
并计算 value
。这将确保您每次都将插值分配给 ng-attr
中提到的 attribute
(ng-attr 之后的部分被视为要添加的属性,假设我们有 ng-attr-value="{{someVar}}"
然后 angular 将评估 someVar
然后将该值分配给该元素的 value 属性。
标记
<div class="media-left">
<img class="media-object" ng-attr-src="{{'images/'+product.image}}"/>
<!--If I replace that expression with a the image file name, it shows the image -->
</div>