- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的观点如下,
<li ng-repeat="img in people.images">
<img ng-src="{{img}}" ng-click="setImage(img)">
</li>
它的工作。但我的疑问是,属性 ng-click
应该设置双括号内的 img 以执行 ng-src
as ng-click= “设置图像({{img}})”
。如下所示,
<li ng-repeat="img in people.images">
<img ng-src="{{img}}" ng-click="setImage({{img}})">
</li>
但是后者不行。
此处的表达式是如何解析的,ng-click
与 ng-src
有何不同?
我真的很困惑。非常感谢任何帮助。
最佳答案
区别如下:一些指令使用表达式,一些不使用。这就是它们彼此“不同”的方式。您可以使用 Angular 文档来查看哪些指令使用表达式,哪些不使用。
ng-click 示例:https://docs.angularjs.org/api/ng/directive/ngClick它使用一个表达式:
ng-src 示例:https://docs.angularjs.org/api/ng/directive/ngSrc它不使用表达式:
ngClick
允许您定义一个类似 JavaScript 的表达式,而 ngSource
允许您定义一个普通的字符串,您还可以在双括号内定义一个表达式。根据 AngularJS 文档,双括号内的所有内容也是一个表达式:https://docs.angularjs.org/guide/expression .
我认为“需要”区分“ngClick”的“Expression”和“ngSrc”的“String”来自它们派生的原始属性:onclick
和 源代码
。
属性src
用于引用一个资源作为字符串,而使用属性onclick
,你可以使用javascript。通常的情况是在 onclick
中调用一个函数,即 onclick="doSomething();"
。我假设 angularjs 使用这些属性作为基础,这就是工作流程相似的原因。 ngClick
允许您使用常用的 javascript 表达式,而 ngSrc
允许您使用字符串并在需要时添加 {{}}
表达式。
将 ngSrc
与变量一起使用的好处,例如 ngSrc="http://localhost/{{myRessource}}"
是,它仅被评估在 $scope.myRessource
设置之后,而不是之前。据我所知,它使用观察者模式在设置变量后立即呈现 View 。
根据您的示例,第二个不起作用:
<li ng-repeat="img in people.images">
<img ng-src="{{img}}" ng-click="setImage({{img}})">
</li>
由于语法错误,它不起作用。 ngClick
使用 javascript 表达式,setImage({{img}})
的语法不正确 - 您不会在 javascript 函数中的变量周围使用双括号。
进一步 $interpolate
和$parse
如上所述,一些指令,如 ngClick
使用 expressions
,而其他指令如 ngSrc
使用普通 Strings
结合{{}}
。两者在 angularJs 端的区别如下:
示例:
$scope.varOne = "asdasdasd";
var test1 = $interpolate("http://localhost/{{varOne}}");
$scope.displayOne = test1($scope);
首先,我们声明一个变量varOne
。 $interpolate
返回一个需要在范围内调用的函数,我们将把它绑定(bind)到局部变量 test1
。然后我们将使用 $scope
调用 test1
。因此,我们将在 displayOne
上拥有字符串 http://localhost/asdasdasd
。
var test2 = $parse("1+5-3");
$scope.displayTwo = test2($scope);
$parse
正在计算 javascript 表达式,作为测试我们可以使用计算“1+5-3”。调用test2
后,结果为3
。
我准备了一个 fiddle ,所以你可以看到这个:http://jsfiddle.net/wSN54/6/
您也可以尝试在 $parse
评估中使用方括号(与第二个示例中发生的情况相同):
$scope.varTwo = 2;
$scope.varThree = 3;
var test2 = $parse("{{varTwo + varThree}}");
$scope.displayTwo = test2($scope);
这必须解决一个错误,因为在通常的 javascript 表达式中不使用双括号:
检查 fiddle :http://jsfiddle.net/wSN54/8/
关于javascript - Angular : How does ng-click directory parses the expression without doubly curly brace?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24851186/
我的 Web 应用程序在后端使用 Node.js 和 Express。当违反内容安全策略 (CSP) 时,报告 URI 报告空对象。我的后台代码如下: app.use(bodyParser.urlen
在服务器端提供静态服务的方式在 Express 中似乎非常简单: To serve static files such as images, CSS files, and JavaScript fil
var express = require('express'); var app = express(); 这就是我们创建快速应用程序的方式。但是这个'express()'是什么?它是方法还是构造函
我在尝试安装时收到以下错误 express : npm ERR! code ERR_OSSL_PEM_NO_START_LINE npm ERR! errno ERR_OSSL_PEM_NO_STAR
如 express 所述routing guide和 this answer ,我们可以创建“迷你应用程序”并从主应用程序使用它。但是我看到一段代码,它在模块中使用 app 而不是 router ap
我正在写一个 NestJS应用。现在我想安装 Express中间件 express-openapi-validator . 但是,我无法让它工作。有一个 description for how to
我看过很多类似的帖子,似乎我声明的 var1 似乎需要在其他地方传递,但我似乎无法弄清楚。 public Expression> CreateEqualNameExpression(string ma
Express(或 Connect 的)bodyParser 中间件被标记为已弃用,建议用户改用: app.use(connect.urlencoded()) app.use(connect.json
我只是想知道这种看似尴尬的配置的原因是什么(来自 Getting Started w/ Apollo Server ), const server = new ApolloServer({ //
我正在尝试在表单组中写入表单控件特定的验证错误消息。我在网上找到了几个教程和示例 ( such as this one ),概述了一个看似简单的 *ngIf div,如果在控件上检测到错误,则显示错误
我有一个简单的 Express 应用程序,托管在 AWS 上,使用无服务器框架。 我正在使用 serverless-http 包装 express 应用程序以部署到 AWS lambda 函数,并使用
我最近在 mozilla 教程的帮助下安装了 node 和 express。我正在安装应用程序生成器的下一步,但是当我运行时 npm install express-generator -g 在我的终
我遇到过两种不同的方式来定义 express、use() 中间件,我想知道它们之间是否有任何区别,或者它是否只是语法糖? 一个 const app = express(); app.use(cors(
我试图让我的 Jade 模板编写一个相对于当前 URL 的超链接 ( )。 例如,我的 View 是从 http://localhost/cats 调用的它看起来像这样: extends layou
检查 Express 文档我在下面看到了这种解决方案: app.all('/*', function(req, res) { console.log('Intercepting request
我似乎无法弄清楚如何包含多个模型。 我有三个模型。Tabs, Servers, and PointsTabs hasMany ServerServers belongsTo Tabs and hasM
我已使用Web PI安装IIS Express。在托盘中,没有IIS Express图标。如何在不使用命令行的情况下启动IIS Express?我希望IIS永久运行,因此没有命令行。 最佳答案 参见R
我不想在我的网站上使用 Jade 或 EJS。如何在不默认使用 Jade 模板的情况下创建快速站点?谢谢 最佳答案 如果您想要的是直接为静态 html 文件提供缓存资源的可能性,同时仍然能够点击“/”
Express是否支持HTTP动词“PATCH”,例如: app.patch("/api/resource", function(req, res){ ... }); 我检查了文档,对我来说似乎还不清
我正在快速服务器中运行 vue SPA。问题是当使用历史模式并刷新页面时,我得到一个 404 not found 异常。我尝试使用 connect-history-api-fallback 但不起作用
我是一名优秀的程序员,十分优秀!