Я вызываю две функции на ng-click. Но это не сработает. Я не уверен, почему Refresh1() не вызывается, когда я перекрестно проверял через отладчик.
HTML CODE
<div class="row" ng-controller="PublishManifestCtrl">
<div class="col-xs-12 col-md-12">
<div class="widget">
<div class="widget-header bordered-bottom bordered-themeprimary">
<i class="widget-icon fa fa-tasks themeprimary"></i>
<span class="widget-caption themeprimary">Manifest Status</span>
</div>
<div class="widget-body">
<form class="form-bordered" role="form">
<div class="form-group">
<label style="padding-left: 8px;">Manifest was last published to agents on <b>{{manifeststatus.manifestLastPublishedDate}}</b>.</label>
</div>
<div class="form-group">
<label style="padding-left: 8px;">Manifest was last updated by <b> {{manifeststatus.lastUpdatedByUser}} </b> on <b>{{manifeststatus.manifestLastedUpdatedDate}}</b>.</label>
</div>
<div class="form-group">
<div class="col-sm-offset-1">
**<button id="PublishButton" class="btn btn-default shiny " ng-disabled="manifeststatus.enablePublishButton" ng-click="Save(manifeststatus);Refresh1()">Publish</button>**
</div>
<br/>
<div id="statusDivPublish" ng-show="showstatus">
<alert type="{{alert.type}}">{{alert.msg}}</alert>
</div>
</div>
</form>
</div>
JSFILE
$scope.Save = function (data) {
debugger;
$http.post($rootScope.WebApiURL + '/updatemanifeststatus');
//$http.get({ url: $rootScope.WebApiURL + '/getmanifeststatus' });
$scope.manifeststatus = data;
$scope.showstatus = true;
$scope.alert = { type: 'success', msg: 'Published Successfully.' };
$(".statusDivPublish").show();
}
$scope.Refresh1 = function () {
//refresh
$state.transitionTo($state.current, $stateParams, {
reload: true,
inherit: false,
notify: true
});
}
});
новый код
$scope.Save = function (data) {
debugger;
$http.post($rootScope.WebApiURL + '/updatemanifeststatus');
//$http.get({ url: $rootScope.WebApiURL + '/getmanifeststatus' });
$scope.manifeststatus = data;
$scope.showstatus = true;
$scope.alert = { type: 'success', msg: 'Published Successfully.' };
$(".statusDivPublish").show();
$scope.Refresh1();
}
$scope.Refresh1 = function ($rootScope, $state, $stateParams) {
debugger;
return {
restrict: 'AC',
link: function (scope, el, attr) {
el.on('click', function () {
$state.transitionTo($state.current, $stateParams, {
reload: true,
inherit: false,
notify: true
});
});
}
};
};
});
Первый обновляет и отображает успешное сообщение, а вторая функция обновляет страницу.
использовать это
$scope.Save = function (data) {
debugger;
$http.post($rootScope.WebApiURL + '/updatemanifeststatus');
//$http.get({ url: $rootScope.WebApiURL + '/getmanifeststatus' });
$scope.manifeststatus = data;
$scope.showstatus = true;
$scope.alert = { type: 'success', msg: 'Published Successfully.' };
$(".statusDivPublish").show();
$scope.refresh();
}
обновите вызов внутри первой функции и удалите его из ng-click.
Обновить
У меня другая проблема, у меня тоже. вы пытаетесь обновить состояние внутри метода, это действительно сложно решить эту проблему с помощью этого фрагмента
if($state.current.name == /*name of the current state*/) {
$state.go($state.current, {}, {reload: true});
$modalInstance.close();
}
else {
$modalInstance.close();
$state.go(/*name of the current state*/);
}
это не сложно, но он не вел себя так, как вы это понимаете.
ОБНОВИТЬ
взяв ваш код
$scope.Refresh1 = function () {
//refresh
$state.go($state.current, {}, {reload: true});
}
Как насчет вызова обновления внутри сохранения в $http
handler?
Как это:
$http.post($rootScope.WebApiURL + '/updatemanifeststatus')
.then(function(){
$scope.Refresh1();
});
Не выполняйте две функции в одном ng-click
, вместо этого добавьте вызов Refresh1
в конец вызова Save
, например.
HTML
<button id="PublishButton"
class="btn btn-default shiny "
ng-disabled="manifeststatus.enablePublishButton"
ng-click="Save(manifeststatus)">Publish</button>
JS
$scope.Save = function (data) {
debugger;
$http.post($rootScope.WebApiURL + '/updatemanifeststatus');
//$http.get({ url: $rootScope.WebApiURL + '/getmanifeststatus' });
$scope.manifeststatus = data;
$scope.showstatus = true;
$scope.alert = { type: 'success', msg: 'Published Successfully.' };
$(".statusDivPublish").show();
$scope.refresh();
}
Обновить
Если вы используете AngularJS V1.2.2
или выше, то с помощью ui-router
необходимо перезагрузить данные.
$state.transitionTo($state.current, $stateParams, {
reload: true,
inherit: false,
notify: true
});
Самый короткий способ сделать это, хотя бы с:
$state.go($state.current, {}, {reload: true}); //second parameter is for $stateParams
Также стоит отметить, что ни одна из них не перезагрузит страницу. Если вы хотите перезагрузить состояние AND на странице, для него нет метода ui-router
. Сделайте window.location.reload(true)
Обновление 2
Если вы получаете:
$ state не определено в Scope. $ scope.Refresh1 (publishmanifest.js: 44) в области видимости. $ scope.Save(publishmanifest.js: 37) в $ parseFunctionCall (angular.js: 12345) на угловом-touch.js: 472 в Scope. $ Eval (angular.js: 14401) в области Scope. $ Apply (angular.js: 14500) в HTMLButtonElement. (angular-touch.js: 471) в HTMLButtonElement.n.event.dispatch(jquery.min.js: 3) в HTMLButtonElement.r.handle(jquery.min.js: 3)
Вы не вводите $state
service в свой controller
. Вы должны сделать это, чтобы использовать его.
//without annotation (inferred, not safe when minifying code)
function Controller($scope, $state) {...}
//inline annotation
module.controller('Controller', ['$scope','$state', function($scope, $state) {...}]);
//$inject property annotation
function Controller($scope, $state) {...}
Controller.$inject = ['$scope', '$state'];
Выберите один из методов выше, чтобы настроить контроллер на использование $state
.
Просто выполните третью функцию:
function3(data) {
save(data);
refresh1();
}