Вызов 2 функции в один клик

0

Я вызываю две функции на 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
                    });
                });
            }
        };
    };
 });

Первый обновляет и отображает успешное сообщение, а вторая функция обновляет страницу.

4 ответа

1

использовать это

$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});
}    
  • 0
    Сообщение отображается, но дата не обновляется.
  • 0
    Можете ли вы просто отредактировать код, который я разместил сейчас, и каково это / * название текущего состояния? я не понял
Показать ещё 4 комментария
0

Как насчет вызова обновления внутри сохранения в $http handler?

Как это:

$http.post($rootScope.WebApiURL + '/updatemanifeststatus')
    .then(function(){
        $scope.Refresh1();
    });
0

Не выполняйте две функции в одном 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.

  • 0
    Я пытался, но данные не обновляются на странице.
  • 0
    я пробовал это ранее, это не помогло и работает
Показать ещё 5 комментариев
-2

Просто выполните третью функцию:

function3(data) {
    save(data);
    refresh1();
}

Ещё вопросы

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