angularjs - 无法读取未定义的属性“nid”,需要将对象传递给另一个控制器
问题描述
我在尝试将选定值从一个控制器传递到另一个控制器时遇到问题。
查看(我将 NgValue 传递给 Controller 中的 $scope)。
<li class="list-group-item" ng-repeat="item in filterData = (informes | filter:{title:searchTitle, resolucion:searchReso, year: searchYear}) | limitTo:10:10*(currentPage-1)">
<div class="wrapper">
<div class="informes" ng-value="nodeID(item)">
<a ng-href="../node-informes/node-informes.html">
<p class="text-center text-truncate">
<small>{{item.title}}</small>
</p>
</a>
</div>
</div>
</li>
控制器。我有“该控制器中的项目”并且控制台打印它。
informes.controller('InformesCtrl', ['drupal', '$rootScope', '$scope', '$http', 'InformesFtry', function(drupal, $rootScope, $scope, $http, InformesFtry) {
$rootScope.getData = function(informes){
$rootScope.nodeID = function(item){
$rootScope.node = item.nid;
console.log($rootScope.node);
};
}
}]);
另一个模块中的第二个控制器(给我“无法读取未定义的属性'nid'错误”)。
nodeInformes.controller('NodeInformesCtrl', ['$rootScope', '$scope', '$http', '$controller', function($rootScope, $scope, $http, $controller) {
$controller('InformesCtrl', {$scope: $scope});
$rootScope.getData(informes);
$rootScope.nodeID(item);
$scope.node = $rootScope.node;
console.log($scope.node);
}]);
它假设我用参数调用了另一个控制器(保存在“$rootScope.node”中的值,将它传递给第二个控制器,但它给了我未定义的错误)。
第一个控制器中的控制台日志有效,但在第二个控制器中无效。
我很感激任何建议。
修改为代码建议,但似乎“项目”对象没有以正确的方式传递。
解决方案
除非绝对必须,否则尽量避免使用$rootScope
(引发或处理事件大约是我用过的唯一一次$rootScope
) - 相反,您可以使用服务在控制器之间可靠地传递数据。在 AngularJS 中,服务是单例的,所以你的所有控制器都可以访问同一个实例。您可以利用这一点并使用该服务在控制器之间“传递”(更准确地共享)数据。
这是一个简单的示例来演示您可以将其应用于您的情况的概念。通常,您不会在这样的单个视图中拥有两个控制器,但出于说明目的(并且能够在 SO 代码段引擎中运行),我在这里完成了它。只是为了证明我没有共享任何控制器变量,我以不同的方式命名它们。
angular.module('app', [])
.service('sharedService', function() {
var service = {};
service.sharedObject = {};
service.sharedObject.value = "Set in service";
return service;
})
.controller('ctrlOne', function($scope, sharedService) {
$scope.sharedObjectC1 = sharedService.sharedObject;
})
.controller('ctrlTwo', function($scope, sharedService) {
$scope.sharedObjectC2 = sharedService.sharedObject;
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.2/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="ctrlOne" style="margin-bottom: 30px;">
<h1>Controller One</h1>
Modifying this value will update it in Controller Two:
<div>
<input ng-model="sharedObjectC1.value" />
</div>
</div>
<hr>
<div ng-controller="ctrlTwo">
<h1>Controller Two</h1>
Modifying this value will update it in Controller One:
<div>
<input ng-model="sharedObjectC2.value" />
</div>
</div>
</div>
推荐阅读
- r - 删除具有R中其他列条件的重复行
- f# - 如何将双引号绑定到 F# 中的字符串?
- xpath - 是否有 XPATH 函数或运算符来比较节点的深度?
- alpine.js - Alpine 的脚本应该放在哪里?
- spring-boot - Teiid Springboot Starter 排序规则或语言环境
- reactjs - 无法通过挂载测试默认值
- android - Android ViewBinding 错误:无法访问类 'android.widget.no_name_in_PSI_3d19d79d_1ba9_4cd0_b7f5_b46aa3cd5d40'
- json - 在 oracle 中更新 JSON 键的值
- html - 如何将占屏幕 90% 的导航栏居中
- angular - 动态替换CKEditor5