如何让Angular使用范围作为数据模型显示变量的字符串?

时间:2014-07-18 23:32:49

标签: javascript html angularjs scope data-modeling

$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”)

1 个答案:

答案 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并不会削减它 它必须是您$scopecontroller或模板中的内容(如果您在模板中提及不在您的范围内的值,Angular会将它们放在您的范围内)。

很少有黑魔法驾驶Angular;其中大部分只是遍历所有$ scope,并检查循环(或循环集)中每个范围的每个键/值[“摘要”阶段],然后更新所有其他范围/视图正在观察那些变化[“应用”阶段],这可能会启动另一轮变更等,直到Angular可以在没有任何价值的情况下完全通过每个$ scope。随时随地改变。

当你更改Digest / Apply循环之外的东西时,$ timeout()就在那里,而且它不是一个Angular理解的方法(ng- *,$ http,$ q等),所以Angular不挑选它,你想给Angular一个轻微的推动,告诉它一些重要的事情。