У меня есть следующая директива, сервис и контроллер внутри моего приложения AngularJS. Эта услуга распространена между директивой и этим контроллером (а также другими контроллерами, использующими одну и ту же услугу в моем приложении). Как показано внутри контроллера, я смотрю сервис для изменений, а в директиве я общаюсь с сервисом для его обновления. По какой-то причине, я не знаю, директива не обновляет мою услугу, так может кто-то, пожалуйста, скажите мне, что я делаю неправильно здесь? БлагодаряAngularJS вызывая обслуживание от настраиваемой директивы
Контроллер:
myapp.controller('ClientsCtrl', function ($scope, UserSvc) { $scope.showForm = UserSvc.frmOpened; $scope.$watch(function() { return UserSvc.frmOpened; }, function() { $scope.showForm = UserSvc.frmOpened; console.log('Changed... ' + $scope.showForm); }); });
Сервис
myapp.factory('UserSvc', function ($log, $q, $http) { return { frmOpened: false }; });
Директива:
myapp.directive('myDirective', ['UserSvc', function (UserSvc) { return { restrict: 'A', link: function (scope, element, attrs) { angular.element(element).on("click", function() { var parentElement = $(this).parent(); if (parentElement.hasClass('sample')) UserSvc.frmOpened = true; //This code never update the service } else { UserSvc.frmOpened = false; //This code never update the service } return false; }); } }; }]);
Большое спасибо, он работает сейчас, но есть отставание (например, 1-2 секунды, но довольно заметно) между моментом, когда я нажимаю кнопку с директивой, и форму, показывающую на основе изменений в диспетчере showForm, так что вы узнаете, связано ли это с использованием часов с ng-show для мониторинга изменений в showForm или из-за применения или всей структуры? Спасибо – MChan
Извините, действительно трудно сказать, не видя весь код, который задействован. – tasseKATT