Я использую угловой и добавил кнопку в index.html:
<button ng-controller = "studentCtrl" ng-click="$emit('update')">refresh</button>
При нажатии кнопки модель обновляется, но представление не выполняется, даже $digest
был выполнен. Когда я добавляю ту же кнопку в templateURL
studentCtrl
, она работает нормально. Я пытаюсь переместить кнопку в ng-view
div
но все равно не удается, так может ли кто-нибудь сказать мне разницу?
templateURL
для studentCtrl
является
<tr ng-controller="studentCtrl" ng-repeat="student in students">
<td>{{student.name}}</td>
<td><button ng-click="$emit('update')">refresh</button></td>
</tr>
и studentCtrl
.controller('studentCtrl', ['$scope', 'baseDataUrl', '$http', '$timeout',
function($scope, baseDataUrl, $http, $timeout) {
$scope.update = function() {
$http.get(baseDataUrl).then(function(res) {
$scope.students = res.data;
});
};
$scope.update();
//when switch to student app, get all students data first
$scope.$on("update", function() {
//for test
$scope.students = [];
});
}]);
используйте $scope.$apply()
для обновления представления. $emit
и $broadcast
используются в качестве делегата, работают на основе какой-либо концепции обработчика событий между контроллерами. Этого не требуется, я думаю, в вашем примере, поэтому вы можете просто написать свой контроллер
.controller('studentCtrl', ['$scope', 'baseDataUrl', '$http', '$timeout',
function($scope, baseDataUrl, $http, $timeout) {
// define your scope varibales
$scope.students = [];
$scope.update = function() {
/// update the students collection
};
}]);
$ emit() отправляет событие вверх по иерархии областей, от дочернего к parent.It следует использовать от дочернего контроллера к родительскому контроллеру, вы можете просто вызвать метод обновления для события click.
<button ng-controller = "studentCtrl" ng-click="update()">refresh</button>