当前位置: 首页 > 面试题库 >

角度范围不影响ng-show预期

岑俊明
2023-03-14
问题内容

我对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应用程序有一个持续存在的问题。