Сейчас я немного смущен. Я написал директиву, которая в основном открывает разные модальности в зависимости от некоторого "статуса". По какой-то причине функция "link" больше не выполняется, она немного назад. Я понятия не имею, когда он прекратил работать. Может быть, некоторые плохо разрешенные конфликты слияния, возможно, некоторые угловые незначительные обновления? Надеюсь, кто-нибудь может помочь или намекнуть мне в правильном направлении.
функция ссылки называется wheren, нет контроллера, иначе он не будет выполнен. Комментирование логики контроллера также не приведет к выполнению ссылки.
<hcd-modal-messages status="status" redirect="app.dashboard.index"></hcd-modal-messages>
директива:
angular
.module('hcdProtocol')
.directive('hcdModalMessages', function () {
return {
restrict: 'E',
templateUrl: 'app/protocols/components/modalMessages/modalMessages.html',
scope: {
labelSuccess: '@labelSuccess',
labelProcess: '@labelProcess',
labelFailed: '@labelFailed',
labelCached: '@labelCached',
status: '=status', //values: HIDDEN, PROCESS, SUCCESS, FAIL
redirect: '=redirect',
delay: '@redirectDelay' //delay in milliseconds
},
controller: ['$scope', '$timeout', '$state', function($scope, $timeout, $state) {
$scope.processModal = new Foundation.Reveal(
angular.element(angular.element(".modal-process")[0]),
{
closeOnClick: false
}
);
$scope.successModal = new Foundation.Reveal(
angular.element(angular.element(".modal-success")[0]),
{
closeOnClick: false
}
);
$scope.failModal = new Foundation.Reveal(
angular.element(angular.element(".modal-fail")[0]),
{
closeOnClick: true
}
);
$scope.offlineModal = new Foundation.Reveal(
angular.element(angular.element(".modal-cached")[0]),
{
closeOnClick: false
}
);
$scope.$watch('status', function(status) {
//close all modals
$scope.processModal.close();
$scope.successModal.close();
$scope.failModal.close();
//open modal corresponding to current status
switch(status) {
case 'PROCESS':
$scope.processModal.open();
break;
case 'SUCCESS':
$scope.successModal.open();
if(typeof $scope.redirect !== 'undefined') {
//delay redirection
$timeout(function () {
$state.go($scope.redirect);
}, $scope.redirectDelay);
}
break;
case 'OFFLINE_CACHED':
$scope.offlineModal.open();
if(typeof $scope.redirect !== 'undefined') {
//delay redirection
$timeout(function () {
$state.go($scope.redirect);
}, $scope.redirectDelay);
}
break;
case 'FAIL':
$scope.failModal.open();
break;
}
});
}],
link: function(scope, element, attrs, controller, transcludeFn) {
//set default label
if(typeof attrs.labelProcess == 'undefined') scope.labelProcess = "Creating new protocol";
if(typeof attrs.labelSuccess == 'undefined') scope.labelSuccess = "successfully created";
if(typeof attrs.labelFailed == 'undefined') scope.labelFailed = "creation failed";
if(typeof attrs.labelCached == 'undefined') scope.labelCached = "Created in offline cache";
scope.redirectDelay = (typeof attrs['redirect-delay'] === 'undefined') ? 3000 : attrs['redirect-delay'];
scope.redirect = (typeof attrs.redirect === 'undefined') ? false : attrs.redirect;
//close modals when directive ist destroy to avoid grey (ui blocking) overlay
scope.$on('$destroy', function() {
scope.processModal.close();
scope.failModal.close();
scope.successModal.close();
scope.offlineModal.close();
});
}
}
});
В настоящее время я использую AngularJS v1.5.3
Мое быстрое исправление: в итоге я включил логику контроллера в свою функцию ссылок. В основном это было там, в первую очередь. поэтому он работает сейчас, так как у меня нет контроллера, но я до сих пор не понимаю, почему контроллер и ссылка не были выполнены в моем случае.
Используйте этот формат
angular
.module('module')
.controller('MyCtrl',/*your controller*/)
.directive('myDirective', function() {
return {
require: '^^MyCtrl',
link: function (scope, el, attrs, MyCtrl) /*....*/
}
})