$scope.headers = {score: "test", gaps:"test2", strand:"test3"};
if (line.lastIndexOf("Score", 0) === 0 ) {
$scope.headers.score = line; }
当我在HTML中添加{{headers.score}}时,我的视图现在显示“test”。有没有办法让{{headers.score}}通过将变量附加到范围来显示字符串?
实施例: (var a =“blanhkaldl”;因此,{{headers.score}}显示“blanhkaldl”)
答案 0 :(得分:0)
...对不起;我同时打喷嚏,打了标签,打了空间,过早地张贴了。
这里有很多很多解决方案。
您可能希望更具体地了解您实际想要完成的任务 您不必向我们提供所有内容,但解决方案将取决于您希望更改的内容,以及您声明逻辑的位置以及模板中的其他内容。
在模板内部,您可以使用ng-if,ng-show或ng-switch来更改元素,具体取决于您是否希望更改元素结构:
$scope = {
isOpen : false,
article : { author : "", date : "", title : "", content : "" }
};
<article >
<h1>{{ article.title }}</h1>
<span ng-if="!isOpen" ng-click="isOpen = true">...show</span>
<p ng-if="isOpen">{{ article.content }}</p>
</article>
或者,您可以在插值中使用三元:
<p>{{ isOpen ? article.content : '...show' }}</p><button ng-click="isOpen = !isOpen">toggle</button>
当您的模型发生变化时,Angular也会更新您的视图。
只要您在Angular中进行更改(在Angular $http
调用之后,或在Angular $timeout
之内,或者当用户触发ng-click
等)时,不必做任何其他事情; Angular将检查您的所有范围以查看更改的内容,并更新您的视图。
如果 DO 在Angular之外进行更改:
xhr.onload = ...
button.onclick ...
window.onresize ...
setTimeout ...
然后在您的活动被触发后,您应该致电
$scope.$apply(function ($scope) { /* make changes in here */ });
或
$timeout(function ($scope) { /* change here, and Angular will start an $apply if one isn't already running */ });
“$ apply” 是实际运行它找到的所有更改的阶段,并更新系统的所有连接位。
不致电$scope.$apply
的原因是,$apply
周期可能已经在运行过程中。
Angular要做的明智之举可能就是将您的更改隐藏到$apply
,或者在完成后立即安排另一个$ apply,以包含您的新更改......
...相反,它会抛出一个错误,告诉你“应用已经在运行” 如果您正在构建Angular,那么在调试时会有意义,当您只想将事物连接在一起时,感觉就会减少... 所以请改用$ timeout。
但是在你的功能范围内只有一个var
并不会削减它
它必须是您$scope
或controller
或模板中的内容(如果您在模板中提及不在您的范围内的值,Angular会将它们放在您的范围内)。
很少有黑魔法驾驶Angular;其中大部分只是遍历所有$ scope,并检查循环(或循环集)中每个范围的每个键/值[“摘要”阶段],然后更新所有其他范围/视图正在观察那些变化[“应用”阶段],这可能会启动另一轮变更等,直到Angular可以在没有任何价值的情况下完全通过每个$ scope。随时随地改变。
当你更改Digest / Apply循环之外的东西时,$ timeout()就在那里,而且它不是一个Angular理解的方法(ng- *,$ http,$ q等),所以Angular不挑选它,你想给Angular一个轻微的推动,告诉它一些重要的事情。