我被告知要将AngularJS的component
合并到我的应用中。在使用组件之前,我有两个控制器,patentList
和patentItem
。当用户点击patent list
中的某个项目时,它会加载有关该特定patent item
的更多详细信息。
现在我已将控制器包含在components
中,数据无法填充patent item
表。这是(我认为)patent item
是patent list
的孩子,我能够访问父母数据。
我的问题是,现在我使用controller
如何访问父components
的数据?任何帮助将不胜感激
列表专利
<tr ng-repeat="x in $ctrl.patents">
<td ng-click="$ctrl.select(x)"><a ui-sref="patents.list.item({id: x.id})">{{x.applicationNumber}}</a></td>
<td ng-bind="x.clientRef"></td>
<td ng-bind="x.currentRenewalCost">$</td>
<td ng-bind="x.costBandEndDate"></td>
<td ng-bind="x.renewalCostNextStage"></td>
<td ng-bind="x.renewalDueDate"></td>
</tr>
专利项
<tr ng-repeat="x in $ctrl.patentItem">
<td><input type="text" ng-model="x.patentApplicationNumber"></td>
<td><input type="text" ng-model="x.clientRef"></td>
<td><input type="text" ng-model="x.renewalStatus"></td>
<td><input type="text" ng-model="x.costBandEndDate"></td>
<td><input type="text" ng-model="x.renewalCostNextStage"></td>
<td><input type="text" ng-model="x.renewalDueDate"></td>
</tr>
app.js
var app = angular.module('myApp', ['ngRoute', 'ui.router']);
app.config(function($stateProvider, $locationProvider, $urlRouterProvider, localStorageServiceProvider) {
app.component('patentList', {
scope: {},
templateUrl: "templates/patents/list/list-patents.htm",
controller: function(loadPatentsService, loadPatentItemService) {
var vm = this;
vm.select = function(item) {
vm.patentItem = loadPatentItemService.select(item);
console.log(item)
}
}
})
});
app.component('patent', {
scope: {},
templateUrl: "templates/patents/list/patent-item.htm",
controller: function(patentTabService, loadPatentItemService) {
var vm = this;
//LOAD OF CODE FOR A TAB PANEL
}
})
app.factory('loadPatentItemService', function() {
var factory = {};
factory.select = function(item) {
factory.storeSelect = [];
selectedItem = item;
factory.storeSelect.push(selectedItem)
return [selectedItem];
}
return factory;
})
app.factory('patentTabService', function() {
var factory = {};
//CODE RELATED TO THE TAB PANEL
return factory;
});
答案 0 :(得分:2)
这可以通过为require
属性提供对象映射来在组件中实现。对象键指定属性名称,在该属性名称下,所需的控制器(对象值)将绑定到需求组件的控制器。
有关详细信息,请参阅
答案 1 :(得分:0)
您可以将$emit/$broadcast
与$scope.$on
答案 2 :(得分:0)
您需要使用$broadcast
和$on
$scope.$broadcast ('key', {data: value}); //to set the value in parent
$scope.$on('key', function (event, data) {}); // to get the value in child