数据表单$scope在Angular的view (page)中不显示

Data form $scope not display in view (page) in Angular

本文关键字:page 显示 view 表单 数据表 scope Angular 数据      更新时间:2023-09-26

我是Angular的新手,我在视图页面上显示数据有问题。我怎么不知道为什么这是问题,因为所有的数据从API和窗体控制器在console.log显示正确。

我的控制器:

'use strict';
var pokayokaCtr = angular.module( 'pokayokaCtr' , [ 'ngRoute' ] );

// -------------------------------------------
//                  DRAWINGS
// -------------------------------------------
pokayokaCtr.controller( 'drawings' , [ '$scope' , '$http', function( $scope, $http ){

    $http.get( 'api/admin/drawings/get' ).
    success( function( data ){
        $scope.drawings = data;
    }).error( function(){
        console.log( 'Błąd pobrania pliku z bazy danych! Drawings' );
    });
}]);
pokayokaCtr.controller( 'drawingCreate' , [ '$scope' , '$http' , '$timeout', function( $scope , $http, $timeout){
    $scope.createDrawing = function ( drawing ) {

        $http.post('api/admin/drawings/create', {
            drawing : drawing
        }).success(function(){
            $timeout(function(){
                $scope.success = false;
                $scope.drawing = {};
            } , 1500 );
            console.log($scope.drawing);
        }).error(function(){
            console.log('Błąd połączenia z bazą danych.')
        });
    };
}]);

pokayokaCtr.controller( 'pokayokes' , [ '$scope' , '$http', '$routeParams', function( $scope, $http, $routeParams ){

    // var drawingId = $routeParams.id;
    // $scope.id = drawingId;
    var pokayokeName = $routeParams.name;
    $scope.name = pokayokeName;

    $http.get( 'api/admin/pokayokes/get/' + pokayokeName ).
    success( function( data ){
        $scope.pokayokes = data;
        // var test = data.ile_py
        // console.log( test );
    }).error( function(){
        console.log( 'Błąd pobrania pliku z bazy danych poka-yoke' );
    });

}]);
pokayokaCtr.filter('rangeFilter', function() {
     return function(input, total) {
        total = parseInt(total);
        for (var i=6; i<=total; i++)
          input.push(i);
        return input;
  };
});

// -------------------------------------------
//                  ARTICLES
// -------------------------------------------
pokayokaCtr.controller( 'articles' , [ '$scope' , '$http', function( $scope, $http  ){

    $http.get( 'api/admin/articles/get' ).
    success( function( data ){
        $scope.articles = data;
    }).error( function(){
        console.log( 'Błąd pobrania pliku z bazy danych! articles' );
    });
}]);
pokayokaCtr.controller( 'articleCreatePart1' , [ '$scope' ,'$routeParams', 'pantonsLoader', function( $scope, $routeParams, pantonsLoader ){

    var drawingName = $routeParams.name_rys;
    $scope.name_rys = drawingName;
    pantonsLoader(function (data){
        $scope.pantons = data;
        console.log(data);
    });

    $scope.articleCreatePart1 = function (article) {

        $http.post('api/admin/articles/create' + drawingName, {
            article : article
        }).success(function(){
            $timeout(function(){
                $scope.success = false;
                $scope.article = {};
            } , 1500 );
            console.log($scope.article);
        }).error(function(){
            console.log('Błąd połączenia z bazą danych.')
        });
    };
}]);
pokayokaCtr.factory('pantonsLoader', ['$http', function($http) {

    return function () {
        $http.get( 'api/admin/pantons/get' ).
        success( function( data ){
            console.log(data);
        }).error( function(){
            console.log( 'Błąd pobrania pliku z bazy danych! pantons' );
        });
    };
}])

Part form page view in html(这部分在ng-view中):

<div class="col-lg-12">
            <div class="flat-panel">
                <div class="flat-panel-header">
                    <h3 class="page-header">Choose panton's color </h3>
                    <div class="row">
                        <div class="form-group col-md-12">
                            <label for="nazwaRysunku">Search name:  </label>
                            <input type="text" class="form-control" placeholder="szukaj..." ng-model="search.nazwa_pan">
                        </div>
                    </div>
                </div>
                <div class="flat-panel-body">
                <div class="row">
                    <div class="col-md-12" >
                        <div class="p-pantony" >
                            <label ng-repeat="panton in pantons | filter : search" class="checkbox-inline" style="width: 100px; float: left; border-bottom: 10px solid rgb({{panton.R}}, {{panton.G}}, {{panton.B}} ) margin:0 10px 10px 0;">
                                <!-- <input type="checkbox"  ng-model="article.pantonP" > x -->
                                <input type="checkbox" ng-model="panton.nazwa_pan"  ng-true-value="true" ng-false-value="false" > {{panton.nazwa_pan}} 
                            </label>
                        </div> 
                    </div>
                </div>    
                </div> <!-- .flat-panel-body -->
            </div>
        </div>
    </div> <!-- /.row -->

我在另一个文件中有同样的问题-我不能使用正常绑定,但ng-repeat正在工作。


12.08.2015 - edit:

我制作了过滤器并添加到控制器中,我的代码如下:

pokayokaCtr.controller( 'pokayokes' , [ '$scope' , '$http', '$routeParams', function( $scope, $http, $routeParams, numberColFilter ){
    var pokayokeName = $routeParams.name;
    $scope.name = pokayokeName;
    var number = $routeParams.number;
    $scope.number = number; 
    $http.get( 'api/admin/pokayokes/get/' + pokayokeName + '/'+ number).
    success( function( data ){
        $scope.pokayokes = data;
    }).error( function(){
        console.log( 'Error database connect!' );
    });

}]);
pokayokaCtr.filter('numberColFilter', function() {
     return function(items,number) {
        var range = [];
        var start = 4;
        var end = start + number;
        for (var i = start; i < end; i++)
        {
            range.push(items[i]);
        }
        return range;
  };
});

我检查了控制器和过滤器中的断点和'number'是可以的,数字有数字,但'end'和' I '是未定义的。为什么呢?这个过滤器写得好吗?因为当我将这个过滤器添加到html时,页面显示'[]'。

我像这样添加了这个过滤器(代码如下),这是可以的吗?

<thead>
       <tr>
           <th>Lp.</th>
           <th>Image</th>
           <th>Name <i class="fa fa-chevron-down"></i> </th>
           <th >Colors in article</th>
           <th ng-repeat="pokayoke in pokayokes">{{$index + 1 | numberColFilter }}</th>
       </tr>
</thead>
<tbody>
       <tr ng-repeat="pokayoke in pokayokes" >
           <td>{{$index + 1}}</td>
           <td><a href=""> <i class="fa fa-picture-o"></i> View</a></td>
           <td>{{pokayoke.name_dra</i> </td>
           <td>{{pokayoke.colors_art}}</td>
           <td ng-repeat="num in pokayoke" >{{ num | numberColFilter}}</td>   
       </tr>                               
</tbody>

看起来好像您有一个文本框,您正在使用它,以便用户可以按术语搜索过滤器,这是存储到$scope.search.nazwa_pan。然而,在过滤器中,您让它只针对$scope.search进行过滤,因此它实际上并没有像您可能正在寻找的那样进行比较。

编辑(匹配更新后的问题):

在控制器的第一行中,不需要引用控制器中的过滤器。

pokayokaCtr.controller( 'pokayokes' , [ '$scope' , '$http', '$routeParams', function( $scope, $http, $routeParams, numberColFilter )
应该

pokayokaCtr.controller( 'pokayokes' , [ '$scope' , '$http', '$routeParams',  function( $scope, $http, $routeParams)

同样,您的过滤器期望传入两个参数,但您只向它提供要迭代的项目-您根本没有使用'number'参数证明它。相反,您需要执行如下操作(因为下面的'4'是传递给过滤器函数第二个参数的值)。

<td ng-repeat="num in pokayoke" >{{ num | numberColFilter: 4}}</td>

或者,如果您要在$scope中存储一个数字。argumentNumber,使用下面的

<td ng-repeat="num in pokayoke" >{{ num | numberColFilter: argumentNumber}}</td>