javascript - Angularjs无法读取未定义的属性 'id'

标签 javascript html angularjs

我是 AngularJS 的新手,我正在尝试创建一个可以从服务器访问数据并将数据发布到服务器的 Web 应用程序。但我面临着问题,我在应用程序中做了什么,我在单独的文件中创建了模块、服务、 View 和 Controller 。我无法访问服务器并将数据发布到服务器。谁能帮帮我。

home.js(controller file)

var myapp = angular.module('demo').controller("homeController",          function($scope,myService){
var userArray = {
   Id:$scope.user.id,
   Model:$scope.user.model,
   Name:$scope.user.name,
   Color:$scope.user.color,
   Price: $scope.user.price
};

myService.async().then(function(d){
  $scope.hello=d;
});

$scope.push = function(userArray){
  myService.saveUser(userArray).then(function(response){
  console.log("inserted");
   });
  }
});

userService.js(service file)

myapp.factory('myService',function($http){
var myService={
async : function(){
  var promise=    $http.get('http://jsonplaceholder.typicode.com/posts/1').then(function(response){
    console.log(response);
    return response;
  });
  return promise;
},
saveUser : function(user){
 $http.post('http://jsonplaceholder.typicode.com/posts',user).success(
   function(response,status,headers,config){
      });

     }
    };
  return myService;
 });

restComponent.js(module file)

var myapp=angular
            .module('demo',['ui.router'])
            .config(function ($stateProvider, $urlRouterProvider){
              $urlRouterProvider.otherwise('/home');
              $stateProvider
              .state('home',{
                url:'/home',
                templateUrl:'Templates/home.html',
                controller:'homeController'
              })
              .state('about', {
                url:'/about',
                templateUrl:'Templates/about.html',
                controller:'aboutController'
              })
              .state('contact',{
                url:'/contact',
                templateUrl:'Templates/contact.html',
                controller:'contactController'
              });

            });

home.html (view file)

  <form ng-submit="mod.push();" ng-controller="homeController as mod">
    Id:<br>
    <input type="text" name="id" ng-model="mod.user.id"><br>
    Model:<br>
    <input type="text" name="model" ng-model="mod.user.model"><br>
    Name:<br>
    <input type="text" name="name" ng-model="mod.user.name"><br>
    Color:<br>
    <input type="text" name="color" ng-model="mod.user.color"><br>
    Price:<br>
    <input type="text" name="price" ng-model="mod.user.price"><br>
    <br>
    <input type="submit" >
  </form>

  <br>
  <br>


  <table>
    <thead>
      <th>UserId</th>
      <th>Name</th>
      <th>Country</th>

    </thead>
 <tbody>
   <tr ng-repeat="employee in hello">
   <td>{{employee.userId}}</td>
   <td>{{employee.name}}</td>
   <td>{{employee.country}}</td>
  </tr>
 </tbody>
 </table>

index.html

 <!doctype html>
 <html lang="en" >
   <head>
      <meta charset="utf-8">
      <title>RestApi</title>
      <link rel="stylesheet"   href="bower_components/bootstrap/dist/css/bootstrap.css" />

       <script src="bower_components/angular/angular.js"></script>
       <script src="
       https://cdnjs.cloudflare.com/ajax/libs/angular-ui-  router/0.3.1/angular-ui-router.js
        "></script>
       <script src="rest-controller.component.js"></script>
       <script src="Controllers/contact.js"></script>
       <script src="Controllers/about.js"></script>
       <script src="Controllers/home.js"></script>
       <script src="Service/userService.js"></script>

    </head>
    <body ng-app="demo" >
     <ol>
       <li><a ui-sref="home">Home</a></li>
       <li><a ui-sref="about">About</a></li>
       <li><a ui-sref="contact">Contact</a></li>
    </ol>


    <div ui-view></div>
  </body>
 </html>

最佳答案

改变这一点

你没有声明你的作用域,所以它是未定义的,为什么最好在使用它之前声明它 还删除了您不需要的用户数组

var myapp = angular.module('demo').controller("homeController",          function($scope,myService){
$scope.user = {}; // here you declare the user obkect
$scope.push = function(user){
    myService.saveUser(user).then(function(response){
      console.log("inserted");
    });
  }
})

和主页 html 你想使用作用域,但你使用了 Controller var View 知道范围和他的所有对象,所以只需写 var fun 名称,它就会直接转到它 或者您可以通过使用 this 而不是像您那样使用范围和 mod 来对 Controller 执行相同的操作

这里您应该发送用户,或者您可以通过发送 $scope.user 在 Controller 中执行此操作

<form ng-submit="push(user);">
    Id:<br>
    <input type="text" name="id" ng-model="user.id"><br>
    Model:<br>
    <input type="text" name="model" ng-model="user.model"><br>
    Name:<br>
    <input type="text" name="name" ng-model="user.name"><br>
    Color:<br>
    <input type="text" name="color" ng-model="user.color"><br>
    Price:<br>
    <input type="text" name="price" ng-model="user.price"><br>
    <br>
    <input type="submit" >
  </form>

和路线

最好在 View 上声明 Controller ,但你不能同时执行这两个操作,所以我选择了 View Controller

var myapp=angular
            .module('demo',['ui.router'])
            .config(function ($stateProvider, $urlRouterProvider){
              $urlRouterProvider.otherwise('/home');
              $stateProvider
              .state('home',{
                url:'/home',
                templateUrl:'Templates/home.html'
              })
              .state('about', {
                url:'/about',
                templateUrl:'Templates/about.html'
              })
              .state('contact',{
                url:'/contact',
                templateUrl:'Templates/contact.html'
              });

            });

应该这样工作

关于javascript - Angularjs无法读取未定义的属性 'id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38457385/

相关文章:

javascript - 外部 javascript 数组初始化

JavaScript promise 不会将数据传递给 .then 除非我明确使用 Promise.resolve

javascript - 如何为 Flow 注释此函数

html - Zurb Ink 按钮不符合面板中的 2 列

php - CI 中的多个选择语句

javascript - 防止默认滚动到输入元素

javascript - AngularUI 路由器 - 实现 "multiple simultaneous states"的最佳方法是什么?

javascript - 为什么 Angular 提供这些看似多余的辅助函数?

java - 数据插入 mongoDB 集合后触发 MongoDB 事件

javascript - HTML 表格列未正确显示