2016-02-27 73 views
1

我有一些问题,从我的形式把我的输入

存在的一些代码行下面,说明由错误检测 我也重新它CodePen

$scope.dish.comments.push(Object.keys{rating: $scope.comment.rating, comment: $scope.comment.comment, author: $scope.comment.author, date: $scope.comment.date}); 

所以,每次我提出我的形式,我总是得到这样的通知,并在控制台

TypeError: Cannot read property 'comments' of undefined

我甲肝在另一个控制器中声明$scope.dish = dish;,所以我希望我可以从另一个控制器访问它,但它不起作用,因为我希望

+0

你有'$ scope.dish'不确定,请尝试使用它之前对其进行初始化...'$ scope.dish = {}' – harishr

+0

控制器范围并不全球,你可能需要从API调用JSON或从文件或定义insame控制器 – Prasad

回答

1

您试图在两个控制器之间共享数据,我建议您使用服务工厂DishDetails然后在两个控制器上注入依赖关系,然后修改数据,将反映到每个控制器。

下面介绍如何使用工厂服务共享数据。

function factory() { 
 
    var service = { 
 
    set: setData, 
 
    get: getData 
 
    }; 
 

 
    service.records = [{ 
 
    FirstName: 'FirstName', 
 
    LastName: 'LastName', 
 
    Age: '21' 
 
    }]; 
 
    return service; 
 

 

 
    function getData() { 
 
    return service.records; 
 
    } 
 

 
    function setData(data) { 
 
    service.records.push(data); 
 
    } 
 
} 
 

 
angular 
 
    .module('mainApp', []) 
 

 
.factory('dataRecords', factory) 
 

 
.controller('AddDataController', function($scope, dataRecords) { 
 
    $scope.AddRecord = function() { 
 
    var data = { 
 
     FirstName: $scope.FirstName, 
 
     LastName: $scope.LastName, 
 
     Age: $scope.Age 
 
    } 
 
    dataRecords.set(data) 
 
    } 
 
}) 
 

 
.controller('ViewDataController', function($scope, dataRecords) { 
 
    $scope.records = dataRecords.get(); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<link data-require="bootstrap-css" data-semver="3.3.6" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" /> 
 

 
<div ng-app="mainApp"> 
 
    <div ng-controller="AddDataController"> 
 
    First Name: 
 
    <input type="text" ng-model="FirstName" name="FirstName" placeholder="Enter First Name" required>Last Name: 
 
    <input type="text" ng-model="LastName" placeholder="Enter Last Name">Age: 
 
    <input type="number" ng-model="Age"> 
 
    <button type="button" ng-click="AddRecord()">ADD</botton> 
 
    </div> 
 
    <div ng-controller="ViewDataController" class="container"> 
 

 
    <h3>Record List Controller</h3> 
 
    <table class="table"> 
 
     <tr> 
 
     <th>FirstName</th> 
 
     <th>LastName</th> 
 
     <th>Age</th> 
 
     </tr> 
 
     <tr ng-repeat="person in records"> 
 
     <td>{{ person.FirstName }}</td> 
 
     <td>{{ person.LastName }}</td> 
 
     <td>{{ person.Age }}</td> 
 
     </tr> 
 
    </table> 
 
    </div> 
 
</div>

+0

您可以通过给服务工厂提供一个简短的逻辑来帮助我吗? – Lyriene

0

您的NG-控制器= “DishDetailController” 添加到父行内容div中的其他控制器将继承$ scope.dish。因此:

<div class="row row-content" ng-controller="DishDetailController"> 
     <div class="col-xs-9 col-xs-offset-1" > 
     ... 
     </div> 
     <div class="col-xs-9 col-xs-offset-1" ng-controller="DishCommentController"> 
     ... 
     </div> 
</div> 
相关问题