В чем разница в Angular при выполнении одной и той же функции в разных сегментах документа

0

Я использую угловой и добавил кнопку в 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 = [];
     });
  }]);
Теги:

2 ответа

0

используйте $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
       };
  }]);
0

$ emit() отправляет событие вверх по иерархии областей, от дочернего к parent.It следует использовать от дочернего контроллера к родительскому контроллеру, вы можете просто вызвать метод обновления для события click.

<button ng-controller = "studentCtrl" ng-click="update()">refresh</button>
  • 0
    Фактически событие было успешно прослушано, только представление не было обновлено, я имею в виду представление, связанное с $ scope.students. Кроме того, ваш код не работает, поведение такое же, $ scope.students изменился, а представление - нет. Также я хочу знать, как вы определяете иерархию области действия, или что я могу искать, чтобы изучить это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню