Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs ng通过I'重复不绑定事件;我正在获取数据_Angularjs_Ng Repeat - Fatal编程技术网

Angularjs ng通过I'重复不绑定事件;我正在获取数据

Angularjs ng通过I'重复不绑定事件;我正在获取数据,angularjs,ng-repeat,Angularjs,Ng Repeat,原谅我,因为我对AngularJS比较陌生。我遇到了一个调用WebApi Web服务的情况。我有两个页面,一个绑定,一个不绑定,两个页面的代码都相同。我可以看到Web服务正在被点击,正在返回数据知道问题出在哪里吗??? 这是Web服务返回的数据: [{"id":1,"name":"Chester" , "gender":"Male" , "salary":25000}, {"id":2,"name":"Mary" , "gender":"Female" , "salary":15

原谅我,因为我对AngularJS比较陌生。我遇到了一个调用WebApi Web服务的情况。我有两个页面,一个绑定,一个不绑定,两个页面的代码都相同。我可以看到Web服务正在被点击,正在返回数据知道问题出在哪里吗???

这是Web服务返回的数据:

[{"id":1,"name":"Chester"  , "gender":"Male"   , "salary":25000},
     {"id":2,"name":"Mary" , "gender":"Female" , "salary":15000},
     {"id":3,"name":"Tim " , "gender":"Male"   , "salary":22000},
     {"id":8,"name":"Wayne", "gender":"Male"   , "salary":81231}]
<!DOCTYPE html>
<html>

<head>
    <title></title>
    <script src="Scripts/angular.js"></script>
    <script src="Scripts/EmployeeAngular.js"></script>
    <meta charset="utf-8" />
</head>
<body ng-app="MyModule">
    <div ng-controller="MyController" ng-init="initController">
        {{MadeItHereMessage}}
        <table>
            <thead>
                <tr>
                    <th>ID</th>
                    <th>Name</th>
                    <th>Gender</th>
                    <th>Salary</th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="employee in employees">
                    <td>{{employee.id}}</td>
                    <td>{{employee.name}}</td>
                    <td>{{employee.gender}}</td>
                    <td>{{employee.salary}}</td>
                </tr>
            </tbody>
        </table>
    </div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="Scripts/angular.js"></script>
    <script src="Scripts/EmployeeAngular.js"></script>
    <meta charset="utf-8" />
</head>
<body ng-app="EmployeeApplication">

<div ng-controller="EmployeeController" ng-init="AngularInit()">
        {{Message}}
    <br/>
        {{DisplayAction}}
    <br />
        <!--The following is for listing the entire list of employees-->
        <div id="listSection" ng-show="DisplayAction=='List'">
            <!--The employees data is: {{employees}}-->
    <!--<div id="listSection">-->
        <table>
            <thead>List of defined Employees</thead>
            <tr>
                <!--<td><button id="btnCreateNew" type="button" value="Create Employee" ng-click="CreateNewEmployee()"></button></td>-->
            </tr>
            <tr>
                <td ng-show="gotdata">

                    <table>
                        <thead>
                            <tr>
                                <th>ID</th>
                                <th>Name</th>
                                <th>Gender</th>
                                <th>Salary</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr ng-repeat="employee in employees">
                                <td>{{employee.id}}</td>
                                <td>{{employee.name}}</td>
                                <td>{{employee.gender}}</td>
                                <td>{{employee.salary}}</td>
                            </tr>
                        </tbody>
                    </table>

                    <!--<table id="EmployeeList">
                        <thead>
                            <tr>
                                <th>ID</th>
                                <th>Name</th>
                                <th>Gender</th>
                                <th>Salary</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr ng-repeat="for employee in employees">
                                <td>{{employee.id}}</td>
                                <td>{{employee.name}}</td>
                                <td>{{employee.gender}}</td>
                                <td>{{employee.salary}}</td>
                                <td><button type="button" value="Details" ng-click="ShowDetails({{employee.id}})"></button></td>
                                <td><button type="button" value="Delete" ng-click="DeleteEmployee({{employee.id}})"></button></td>
                                <td><button type="button" value="Edit" ng-click="EditEmployee({{employee.id}})"></button></td>
                            </tr>
                        </tbody>
                    </table>-->
                </td>
            </tr>
        </table>
    </div>
        <!--The following is for listing the details of a single employee-->
        <!--<div id="DetailsSection" ng-show="DisplayAction=='Details'">
            <table>
                <tr>
                    <td>ID:</td>
                    <td> <input id="DetailsID" value={{id}} /></td>
                </tr>
                <tr>
                    <td>Name:</td>
                    <td><input id="DetailsName" value={{name}} /> </td>
                </tr>
                <tr>
                    <td>Gender:</td>
                    <td><input id="DetailsGender" value={{gender}} /> </td>
                </tr>
                <tr>
                    <td>Salary:</td>
                    <td><input id="DetailsSalary" value={{salary}} /> </td>
                </tr>
                <tr>
                    <td>
                        <button id="NavTolist" type="button" value="Back to List" ng-click="DisplayList()"></button>
                    </td>
                    <td>
                        <button id="NavToDelete" type="button" value="Delete" ng-click="DeleteEmployee({{id}})"></button>
                    </td>
                    <td>
                        <button id="NavToEdit" type="button" value="Edit" ng-click="EditEmployee({{id}})"></button>
                    </td>
                </tr>
            </table>
        </div>-->
        <!--The following is for editing a employee-->
        <!--<div id="EditSection" ng-show="DisplayAction=='Edit'">
            <table>
                <tr>
                    <td>ID:</td>
                    <td>
                        <input id="ID" value={{id}} />
                    </td>
                </tr>
                <tr>
                    <td>Name:</td>
                    <td><input id="" value={{name}} ng-bind="name" /> </td>
                </tr>
                <tr>
                    <td>Gender:</td>
                    <td><input id="" value={{gender}} ng-bind="gender" /> </td>
                </tr>
                <tr>
                    <td>Salary:</td>
                    <td><input id="" value={{salary}} ng-bind="salary" /> </td>
                </tr>
                <tr>
                    <td>
                        <button id="EditUpdate" type="button" value="Update" ng-click="EditUpdate()"></button>
                    </td>
                    <td>
                        <button id="NavTolistEdit" type="button" value="Back to List" ng-click="DisplayList()"></button>
                    </td>
                    <td>
                        <button id="NavToDeleteEdit" type="button" value="Delete" ng-click="DeleteEmployee({{id}})"></button>
                    </td>
                </tr>
            </table>
        </div>-->
        <!--The following is for verification of deletion-->
        <!--<div id="DeletionSection" ng-show="DisplayAction=='Delete'">
            <table>
                <tr>
                    <td>Do you really want to delete {{name}}</td>
                    <td></td>
                    <td>
                        <button id="btnCancelDelete" type="button" value="No"></button>
                    </td>
                    <td>
                        <button id="btnDeleteEmployee" type="button" value="Yes" ng-click="DoDeleteEmployee({{id}})"></button>
                    </td>
                </tr>
            </table>
        </div>-->
        <!--The following is for creation of a employee-->
        <!--<div id="CreationSection" ng-show="DisplayAction=='Create'">

            <table>
                <tr>
                    <td>Name:</td>
                    <td><input id="" value="" ng-bind="name" /> </td>
                </tr>
                <tr>
                    <td>Gender:</td>
                    <td><input id="" value="" ng-bind="gender" /> </td>
                </tr>
                <tr>
                    <td>Salary:</td>
                    <td><input id="" value="" ng-bind="salary" /> </td>
                </tr>
                <tr>
                    <td>
                        <button id="btnCreateEmployee" type="button" value="Delete" ng-click="CreateEmployee()"></button>
                    </td>
                    <td>
                        <button id="NavTolistEdit" type="button" value="Back to List" ng-click="DisplayList()"></button>
                    </td>
                </tr>
            </table>

        </div>-->
    </div>
</body>
</html>
    var app = angular.module("EmployeeApplication", [])
.controller("EmployeeController",

    function ($scope, $http) {

        AngularInit();

        function AngularInit()
        {
            //This will be called once per form load, via the ng-load function on the div
            $scope.name = '';
            $scope.gender = '';
            $scope.salary = '';
            $scope.id = '';
            $scope.DisplayAction = '';
            $scope.gotdata = false;
            DisplayList();
        }

        function GetAllEmployees($http) {
            //$scope.Message = 'NULL';
            //$scope.employees = {};
            $http.get('http://localhost:65315/api/employee').then(function (response) {
                $scope.employees = response.data;
                $scope.Message = 'OK';
                $scope.go = true;
            },
            function (err) {
                $scope.Message = 'Call failed' + err.status + '  ' + err.statusText;
                $scope.employees = {};
                $scope.gotdata = false;
            }
            );

            window.setTimeout(function () {
                $scope.gotdata = true;
            }, 1000);
        };

        function DisplayList() {
            //call the web service to get the list of people
            //set the display action so that the list will be displayed
            GetAllEmployees($http)
            $scope.DisplayAction = 'List';
        };

        function CreateNewEmployee() {
            $scope.name = '';
            $scope.gender = '';
            $scope.salary = '';
            $scope.id = '';
            $scope.DisplayAction = 'Create';
        };

        function ShowDetails(id) {
            //call the web service to get the details of the person
            //Set the $scope.CurrentEmployee
            $scope.DisplayAction = 'Details';
        };

        function CreateEmployee() {

            //perform the actual creation based on $scope.CurrentEmployee

            //if successful
            DisplayList();
        };

        function DeleteEmployee(id) {
            $scope.DisplayAction = 'Delete';
        };

        function DoDeleteEmployee(id) {
            //Perform actual deletion
            //if successful
            DisplayList();
        };

        function EditEmployee(id) {
            //get the employee based on ID
            $scope.DisplayAction = 'Edit';
        };

        function EditUpdate() {
            //perform the actual update based on $scope.id

            //if successful
            DisplayList();
        };
    }

);

var app = angular.module("MyModule", []).controller("MyController", function ($scope, $http)
{
    $scope.MadeItHereMessage = 'We made it to the controller (first controller)';
    $scope.employees = {};
    $http.get('http://localhost:65315/api/employee').then(function (response) {
        $scope.employees = response.data;
        $scope.Message = "OK";
    },
    function (err)
    {
        $scope.Message = "Call failed" + err.status + "  " + err.statusText;
    }
    );

});
有效的代码如下:

[{"id":1,"name":"Chester"  , "gender":"Male"   , "salary":25000},
     {"id":2,"name":"Mary" , "gender":"Female" , "salary":15000},
     {"id":3,"name":"Tim " , "gender":"Male"   , "salary":22000},
     {"id":8,"name":"Wayne", "gender":"Male"   , "salary":81231}]
<!DOCTYPE html>
<html>

<head>
    <title></title>
    <script src="Scripts/angular.js"></script>
    <script src="Scripts/EmployeeAngular.js"></script>
    <meta charset="utf-8" />
</head>
<body ng-app="MyModule">
    <div ng-controller="MyController" ng-init="initController">
        {{MadeItHereMessage}}
        <table>
            <thead>
                <tr>
                    <th>ID</th>
                    <th>Name</th>
                    <th>Gender</th>
                    <th>Salary</th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="employee in employees">
                    <td>{{employee.id}}</td>
                    <td>{{employee.name}}</td>
                    <td>{{employee.gender}}</td>
                    <td>{{employee.salary}}</td>
                </tr>
            </tbody>
        </table>
    </div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="Scripts/angular.js"></script>
    <script src="Scripts/EmployeeAngular.js"></script>
    <meta charset="utf-8" />
</head>
<body ng-app="EmployeeApplication">

<div ng-controller="EmployeeController" ng-init="AngularInit()">
        {{Message}}
    <br/>
        {{DisplayAction}}
    <br />
        <!--The following is for listing the entire list of employees-->
        <div id="listSection" ng-show="DisplayAction=='List'">
            <!--The employees data is: {{employees}}-->
    <!--<div id="listSection">-->
        <table>
            <thead>List of defined Employees</thead>
            <tr>
                <!--<td><button id="btnCreateNew" type="button" value="Create Employee" ng-click="CreateNewEmployee()"></button></td>-->
            </tr>
            <tr>
                <td ng-show="gotdata">

                    <table>
                        <thead>
                            <tr>
                                <th>ID</th>
                                <th>Name</th>
                                <th>Gender</th>
                                <th>Salary</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr ng-repeat="employee in employees">
                                <td>{{employee.id}}</td>
                                <td>{{employee.name}}</td>
                                <td>{{employee.gender}}</td>
                                <td>{{employee.salary}}</td>
                            </tr>
                        </tbody>
                    </table>

                    <!--<table id="EmployeeList">
                        <thead>
                            <tr>
                                <th>ID</th>
                                <th>Name</th>
                                <th>Gender</th>
                                <th>Salary</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr ng-repeat="for employee in employees">
                                <td>{{employee.id}}</td>
                                <td>{{employee.name}}</td>
                                <td>{{employee.gender}}</td>
                                <td>{{employee.salary}}</td>
                                <td><button type="button" value="Details" ng-click="ShowDetails({{employee.id}})"></button></td>
                                <td><button type="button" value="Delete" ng-click="DeleteEmployee({{employee.id}})"></button></td>
                                <td><button type="button" value="Edit" ng-click="EditEmployee({{employee.id}})"></button></td>
                            </tr>
                        </tbody>
                    </table>-->
                </td>
            </tr>
        </table>
    </div>
        <!--The following is for listing the details of a single employee-->
        <!--<div id="DetailsSection" ng-show="DisplayAction=='Details'">
            <table>
                <tr>
                    <td>ID:</td>
                    <td> <input id="DetailsID" value={{id}} /></td>
                </tr>
                <tr>
                    <td>Name:</td>
                    <td><input id="DetailsName" value={{name}} /> </td>
                </tr>
                <tr>
                    <td>Gender:</td>
                    <td><input id="DetailsGender" value={{gender}} /> </td>
                </tr>
                <tr>
                    <td>Salary:</td>
                    <td><input id="DetailsSalary" value={{salary}} /> </td>
                </tr>
                <tr>
                    <td>
                        <button id="NavTolist" type="button" value="Back to List" ng-click="DisplayList()"></button>
                    </td>
                    <td>
                        <button id="NavToDelete" type="button" value="Delete" ng-click="DeleteEmployee({{id}})"></button>
                    </td>
                    <td>
                        <button id="NavToEdit" type="button" value="Edit" ng-click="EditEmployee({{id}})"></button>
                    </td>
                </tr>
            </table>
        </div>-->
        <!--The following is for editing a employee-->
        <!--<div id="EditSection" ng-show="DisplayAction=='Edit'">
            <table>
                <tr>
                    <td>ID:</td>
                    <td>
                        <input id="ID" value={{id}} />
                    </td>
                </tr>
                <tr>
                    <td>Name:</td>
                    <td><input id="" value={{name}} ng-bind="name" /> </td>
                </tr>
                <tr>
                    <td>Gender:</td>
                    <td><input id="" value={{gender}} ng-bind="gender" /> </td>
                </tr>
                <tr>
                    <td>Salary:</td>
                    <td><input id="" value={{salary}} ng-bind="salary" /> </td>
                </tr>
                <tr>
                    <td>
                        <button id="EditUpdate" type="button" value="Update" ng-click="EditUpdate()"></button>
                    </td>
                    <td>
                        <button id="NavTolistEdit" type="button" value="Back to List" ng-click="DisplayList()"></button>
                    </td>
                    <td>
                        <button id="NavToDeleteEdit" type="button" value="Delete" ng-click="DeleteEmployee({{id}})"></button>
                    </td>
                </tr>
            </table>
        </div>-->
        <!--The following is for verification of deletion-->
        <!--<div id="DeletionSection" ng-show="DisplayAction=='Delete'">
            <table>
                <tr>
                    <td>Do you really want to delete {{name}}</td>
                    <td></td>
                    <td>
                        <button id="btnCancelDelete" type="button" value="No"></button>
                    </td>
                    <td>
                        <button id="btnDeleteEmployee" type="button" value="Yes" ng-click="DoDeleteEmployee({{id}})"></button>
                    </td>
                </tr>
            </table>
        </div>-->
        <!--The following is for creation of a employee-->
        <!--<div id="CreationSection" ng-show="DisplayAction=='Create'">

            <table>
                <tr>
                    <td>Name:</td>
                    <td><input id="" value="" ng-bind="name" /> </td>
                </tr>
                <tr>
                    <td>Gender:</td>
                    <td><input id="" value="" ng-bind="gender" /> </td>
                </tr>
                <tr>
                    <td>Salary:</td>
                    <td><input id="" value="" ng-bind="salary" /> </td>
                </tr>
                <tr>
                    <td>
                        <button id="btnCreateEmployee" type="button" value="Delete" ng-click="CreateEmployee()"></button>
                    </td>
                    <td>
                        <button id="NavTolistEdit" type="button" value="Back to List" ng-click="DisplayList()"></button>
                    </td>
                </tr>
            </table>

        </div>-->
    </div>
</body>
</html>
    var app = angular.module("EmployeeApplication", [])
.controller("EmployeeController",

    function ($scope, $http) {

        AngularInit();

        function AngularInit()
        {
            //This will be called once per form load, via the ng-load function on the div
            $scope.name = '';
            $scope.gender = '';
            $scope.salary = '';
            $scope.id = '';
            $scope.DisplayAction = '';
            $scope.gotdata = false;
            DisplayList();
        }

        function GetAllEmployees($http) {
            //$scope.Message = 'NULL';
            //$scope.employees = {};
            $http.get('http://localhost:65315/api/employee').then(function (response) {
                $scope.employees = response.data;
                $scope.Message = 'OK';
                $scope.go = true;
            },
            function (err) {
                $scope.Message = 'Call failed' + err.status + '  ' + err.statusText;
                $scope.employees = {};
                $scope.gotdata = false;
            }
            );

            window.setTimeout(function () {
                $scope.gotdata = true;
            }, 1000);
        };

        function DisplayList() {
            //call the web service to get the list of people
            //set the display action so that the list will be displayed
            GetAllEmployees($http)
            $scope.DisplayAction = 'List';
        };

        function CreateNewEmployee() {
            $scope.name = '';
            $scope.gender = '';
            $scope.salary = '';
            $scope.id = '';
            $scope.DisplayAction = 'Create';
        };

        function ShowDetails(id) {
            //call the web service to get the details of the person
            //Set the $scope.CurrentEmployee
            $scope.DisplayAction = 'Details';
        };

        function CreateEmployee() {

            //perform the actual creation based on $scope.CurrentEmployee

            //if successful
            DisplayList();
        };

        function DeleteEmployee(id) {
            $scope.DisplayAction = 'Delete';
        };

        function DoDeleteEmployee(id) {
            //Perform actual deletion
            //if successful
            DisplayList();
        };

        function EditEmployee(id) {
            //get the employee based on ID
            $scope.DisplayAction = 'Edit';
        };

        function EditUpdate() {
            //perform the actual update based on $scope.id

            //if successful
            DisplayList();
        };
    }

);

var app = angular.module("MyModule", []).controller("MyController", function ($scope, $http)
{
    $scope.MadeItHereMessage = 'We made it to the controller (first controller)';
    $scope.employees = {};
    $http.get('http://localhost:65315/api/employee').then(function (response) {
        $scope.employees = response.data;
        $scope.Message = "OK";
    },
    function (err)
    {
        $scope.Message = "Call failed" + err.status + "  " + err.statusText;
    }
    );

});

在获取http数据之前,将加载模板。因此,解决方案是在ressource加载ng if时显示模板

你能试试吗

<tr ng-repeat="employee in employees" ng-if="employees && employees!={undefined}">

在获取http数据之前,将加载模板。因此,解决方案是在ressource加载ng if时显示模板

你能试试吗

<tr ng-repeat="employee in employees" ng-if="employees && employees!={undefined}">

$timeout
服务替换对
窗口的调用

//window.setTimeout(function () {
//Use $timeout service
$timeout(function() {
    $scope.gotdata = true;
}, 1000);
$timeout
服务与AngularJS摘要周期正确集成。AngularJS框架不会立即看到使用
setTimeout
$scope
所做的更改


有关更多信息,请参见用
$timeout
服务替换对
窗口.setTimeout
的调用

//window.setTimeout(function () {
//Use $timeout service
$timeout(function() {
    $scope.gotdata = true;
}, 1000);
$timeout
服务与AngularJS摘要周期正确集成。AngularJS框架不会立即看到使用
setTimeout
$scope
所做的更改


有关更多信息,请参见

首先,您不需要将$http传递到“GetAllEmployees”函数中,因为它已经存在了


其次,我建议使用“$q”将响应保存到变量中

首先,您不需要将$http传递到“GetAllEmployees”函数中,因为它已经存在了


其次,我建议使用“$q”将响应保存到变量中

为什么有2个AngularInit()调用?一个在视图中,另一个在控制器中。因为在我看来,我的理解是,函数调用并没有被执行。我可以从代码中调用函数来执行初始化,这取决于具体情况?一个在视图中,另一个在控制器中。因为在我看来,我的理解是,函数调用并没有被执行。我可以从代码中调用函数来执行初始化,这取决于具体情况。首先包含超时函数的唯一原因是,我正在尝试尝试确定是否发生超时。但这是个好消息。谢谢一开始包含timeout函数的唯一原因是,我正在尝试尝试一些事情,以确定是否发生了超时。但这是个好消息。谢谢事实证明,这正是问题所在。干得好谢谢事实证明,这正是问题所在。干得好谢谢谢谢你的信息。我也会试试这个。ng if解决方案对我有效,我不知道$q函数。我知道我不需要在函数上放置$http,但我正在尽我所能让它工作。谢谢你提供的信息。我也会试试这个。ng if解决方案对我有效,我不知道$q函数。我知道我不需要在函数上放置$http,但我正在尽我所能让它工作。