在Angular js中$scope无法工作

3

如果我使用“this”方法公开变量,则代码可以正常工作。然而,当在代码中包含范围后,页面仅显示控制器范围之外的元素。

<!DOCTYPE html>
<html lang="en" ng-app="myApp">

<head>
     <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head
         content must come *after* these tags -->
    <title>Ristorante Con Fusion: Menu</title>
        <!-- Bootstrap -->
    <link href="bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="bower_components/bootstrap/dist/css/bootstrap-theme.min.css" rel="stylesheet">
    <link href="bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet">
    <link href="styles/bootstrap-social.css" rel="stylesheet">
    <link href="styles/mystyles.css" rel="stylesheet">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>

<body>

    <div class="container">
        <div class="row row-content" ng-controller="myctrl">
            <div class="col-xs-12">
                <div class="tab-content">
            <ul class="nav nav-tabs" role="tablist">
                    <li role="presentation" ng-class="{active: isSelected(1)}">
                    <a href="" ng-click="select(1)"
                     aria-controls="all menu"
                     role="tab">The Menu</a></li>
                    <li role="presentation" ng-class="{active: isSelected(2)}">
                    <a href="" ng-click="select(2)"
                     aria-controls="appetizers"
                     role="tab">Appetizers</a></li>
                    <li role="presentation" ng-class="{active: isSelected(3)}">
                    <a href="" ng-click=" select(3)"
                     aria-controls="mains"
                     role="tab">Mains</a></li>
                    <li role="presentation" ng-class="{active: isSelected(4)}">
                    <a href="" ng-click=" select(4)"
                     aria-controls="desserts"
                     role="tab">Desserts</a></li>
                </ul>
                </div>
            <ul>
            <li class="media" ng-repeat="dish in dishes|filter:filtText">
                    <div class="media-left media-middle">
                        <a href="#">
                        <img class="media-object img-thumbnail"
                         ng-src={{dish.image}} alt="Uthappizza">
                        </a>
                    </div>
                    <div class="media-body">
                        <h2 class="media-heading">{{dish.name}}
                         <span class="label label-danger">{{dish.label}}</span>
                         <span class="badge">{{dish.price | currency}}</span></h2>
                          <p>{{dish.description}}</p>
                        <p>Comment: {{dish.comment}}</p>
                        </div>
                </li>
                </ul>
            </div>
            </div>
        </div>

<script src="bower_components/angular/angular.min.js"></script>
<script src="scripts/app.js"></script>
<script src="scripts/controller.js"></script>
</body>

</html>

App.js:

 var app=angular.module("myApp",[]);

Controller.js:

app.controller("myctrl",['$scope',function($scope) 
        {       $scope.dishes=[
                         {
                           name:'Uthapizza',
                           image: 'images/uthapizza.png',
                           category: 'mains',
                           label:'Hot',
                           price:'4.99',
                           description:'A unique combination of Indian Uthappam (pancake) and Italian pizza, topped with Cerignola olives, ripe vine cherry tomatoes, Vidalia onion, Guntur chillies and Buffalo Paneer.',
                           comment: ''
                        },
                        {
                           name:'Zucchipakoda',
                           image: 'images/zucchipakoda.png',
                           category: 'appetizer',
                           label:'',
                           price:'1.99',
                           description:'Deep fried Zucchini coated with mildly spiced Chickpea flour batter accompanied with a sweet-tangy tamarind sauce',
                           comment: ''
                        },
                        {
                           name:'Vadonut',
                           image: 'images/vadonut.png',
                           category: 'appetizer',
                           label:'New',
                           price:'1.99',
                           description:'A quintessential ConFusion experience, is it a vada or is it a donut?',
                           comment: ''
                        },
                        {
                           name:'ElaiCheese Cake',
                           image: 'images/elaicheesecake.png',
                           category: 'dessert',
                           label:'',
                           price:'2.99',
                           description:'A delectable, semi-sweet New York Style Cheese Cake, with Graham cracker crust and spiced with Indian cardamoms',
                           comment: ''
                        }
                        ];
                         $scope.filtText = '';
                            $scope.tab = 1;
             $scope.dishes = dishes;
             $scope.select = function(setTab) {
                 $scope.tab = setTab;

                if (setTab === 2)
                     $scope.filtText = "appetizer";
                else if (setTab === 3)
                     $scope.filtText = "mains";
                else if (setTab === 4)
                     $scope.filtText = "dessert";
                else
                     $scope.filtText = "";
            }
             $scope.isSelected = function (checkTab) {
                return ( $scope.tab === checkTab);
            }

            }])

你正在覆盖 $scope.dishes = dishes; - Yosvel Quintero
其实我已经弄明白了,是因为在controller.js中重新定义了dishes变量。 $scope.dishes = dishes; 将其删除后,现在可以正常工作了。 无论如何还是谢谢 :) - Zain
2个回答

1
您正在覆盖/重新定义变量的行为发生在以下代码行中:
$scope.dishes = dishes;

1
删除以下代码行。
$scope.dishes = dishes;

在这里你所做的是将 $scope.dishes 的值设置为变量 dishes 的值,但是 dishes 没有被初始化或定义在任何地方,因此你很可能会用 undefined 的值覆盖了你创建的菜肴数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接