我试图创建你提到的场景。您可以通过组件设计中的生命周期生命周期钩子$onchange来监听控制器更新 。
请参阅在单击按钮时将数据填充到父控制器中时填充下拉组件的示例。希望这会有所帮助!
var app = angular.module("myApp", []);
app.controller("mainController", function(bookService, $scope) {
var vm = this;
vm.showDropdown = false;
vm.loadBooks = function() {
bookService.getAllBooks().then(function(books) {
vm.books = books;
vm.showDropdown = true;
}, function(err) {
vm.showDropdown = false;
//error
});
}
});
function dropdownControllerFn(bookService) {
var model = this;
model.$onInit = function() {
//do intialization
}
model.$onChanges = function(changes) {
model.books = changes;
};
}
app.component("rsDropdown", {
templateUrl: 'dropdownComponent.html',
bindings: {
books: '<'
},
controllerAs: 'model',
controller: dropdownControllerFn
});
app.factory('bookService', ['$http', '$timeout', '$q', function($http, $timeout, $q) {
var urlBase = 'favouriteBooks.json';
var service = {};
service.getAllBooks = function() {
return $http.get(urlBase).then(function(response) {
return response.data;
});
};
return service;
}]);;
}]);
下拉组件.html
<div>
<select ng-options="s.bookName for s in model.books" ng-model="selitem">
<option value="">--Select--</option>
</select>
</div>
索引.html
<body data-ng-app="myApp" data-ng-controller="mainController as vm">
<rs-dropdown books=vm.books ng-if="vm.showDropdown"></rs-dropdown>
<button ng-click="vm.loadBooks()">Get Books</button>
</body>