我对Angular.js范围有疑问。
首先,我是Angular的新手,我已经阅读了范围文档,并尽我所能来理解它。我觉得我的问题与此类似: ng-show不符合预期的绑定
但是,我的示例本质上更简单,我仍然不明白我所缺少的内容。
我的html非常简单,我有一个包装所有内容的控制器:
<div ng-controller="ApplicationFormController"></div>
在其中,我有几个部分:
<div ng-controller="ApplicationFormController">
<button ng-click="previous()">previous</button>
<button ng-click="next()">previous</button>
<p> You are on section #1 </p>
<div class="section1" ng-show="{{ section.id == 1 }}"> Section 1 </div>
<div class="section2" ng-show="{{ section.id == 2 }}"> Section 2 </div>
<div class="section3" ng-show="{{ section.id == 3 }}"> Section 3 </div>
</div>
如您所见,我打算在将其应用于控制器时显示该部分。
我的应用程序逻辑如下:
app.controller('ApplicationFormController', ['$scope', function($scope) {
$scope.sections = sections;
$scope.section = $scope.sections[0];
$scope.next = function() {
var index = $scope.sections.map(function(x){
return x.id;
}).indexOf($scope.section.id);
$scope.section = $scope.sections[index+1];
};
$scope.previous = function() {
var index = $scope.sections.map(function(x){
return x.id;
}).indexOf($scope.section.id);
$scope.section = $scope.sections[index-1];
};
}]);
section数组如下:
var sections = [
{
id: 1,
name: 'Section 1',
steps: [
{
id: 1,
name: 'Step 1',
},
{
id: 2,
name: 'Step 2',
},
{
id: 3,
name: 'Step 3',
},
]
},
{
id: 2,
name: 'Section 2',
steps: [
{
id: 1,
name: 'Step 1',
},
{
id: 2,
name: 'Step 2',
},
{
id: 3,
name: 'Step 3',
},
]
}
];
很简单的东西。
因此,问题在于显示和隐藏。
当我触发下一个或上一个事件运行时,我会看到此<p>
消息,因为标记会使用适当的ID进行更新,例如:如果按下下一步,p标记将进行更新以反映:
<p>You are on section #2</p>
如预期的那样。
奇怪的是,当前显示的部分不会更新。在这种情况下,第一部分将保持可见,而第二部分将保持隐藏。
是什么导致DOM无法更新以反映控制器的当前状态。
这是因为ng-show
需要一个表达式时,其手表在内部设置。但是您boolean string
通过使用插值({{
)提供表达式()的值。因此watch永远不会执行,因为scope.$watch(attr.ngShow,...)
它将评估scope['true/false']
而不是您想要的实际表达。
更改:
<div class="section1" ng-show="{{ section.id == 1 }}"> Section 1 </div>
至
<div class="section1" ng-show="section.id == 1"> Section 1 </div>
对其他人也是如此。
问题内容: 我有一个控制器,我写的,我在多个地方使用我的应用程序和,就像这样: 在控制器/模板中,我希望该值存在,并且整个事情都围绕着这个想法建立。不过,现在,我需要以稍微不同的方式使用控制器,而无需使用,但仍然需要能够传递。我看到并认为它可以满足我的需要,例如: 但这似乎不起作用。任何人都有任何想法如何在这样的单个实例中为范围传递变量? 编辑:在此上方的控制器正在加载和值,如下所示: 问题答案:
我有元素,这些元素有一个绑定到复选框的语句。如果我物理地选中该复选框,将按预期响应。但是,如果我通过JavaScript选中或取消选中复选框,则复选框会按预期被选中或取消选中,但没有响应。这是正常工作吗?有没有更好的办法做到这一点? 下面是我的代码示例:“[]”=“<>” HTML-第1部分 [li id=“HomeButton”ng-if=“HomeChecked!=true”onclick=“
问题内容: 想象一下可能会在网页上呈现的大量内容,例如图表。Angular提供2个选项来切换内容的可见性。 ng-show 将呈现内容,而不管其表达方式是什么,然后在事实之后简单地“隐藏”它。这是不理想的,因为用户在会话期间可能永远不会“打开”内容,因此渲染内容很浪费。 ng-if 在这方面更好。如果表达式为假,则用它代替ng- show可以防止首先显示大量内容。但是,它的优点也是缺点,因为如果用
问题内容: 我有一个视图,其中父div上具有ng-if,而某些子元素上具有ng-show。嵌套在带有ng-if的元素下时,ng- show似乎无法正常工作。这是Angular错误还是我做错了什么? 见这个矮子。 HTML: JavaScript: 谢谢, 安迪 问题答案: 与指令不同,它 创建了一个新的作用域* 。 * 因此,当您在内部编写内容时,您是在子范围而非主范围上设置属性。 要解决此问题,
我正在从事一个项目,该项目在很大程度上依赖angular来完成前端任务。在一个显示了大约50个带有ng repeat的条目的列表页面上,每个条目都有大量的观察者,因此我决定使用angular的静态绑定减少观察者的数量,并能够将数量从12k观察者减少到8k观察者,但即使在观察者数量大幅减少之后,加载时间、dom呈现或摘要周期时间也没有改善。digest cyle使用8k观察程序所需的时间与使用12k
我的Windows8应用程序有一个持续存在的问题。