单击ng-click调用2个函数

时间:2015-08-26 11:54:07

标签: javascript html angularjs

我在ng-click上调用了两个函数。但它不起作用。我不确定为什么在我通过调试器交叉检查时没有调用Refresh1()。

SessionID

JSFILE

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>

新代码

$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
        });
    }    
});

第一个更新并显示成功的消息,而第二个功能刷新页面。

4 个答案:

答案 0 :(得分: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();

}

在第一个函数中调用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*/);
  }

它并不难,但它并没有表现得像你理解它。


UPDATE
拿你的代码

$scope.Refresh1 = function () {
    //refresh
    $state.go($state.current, {}, {reload: true});
}    

答案 1 :(得分: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

还值得注意的是,这些都不会实际重新加载页面。如果要重新加载状态和页面,则没有ui-router方法。做window.location.reload(true)

更新2

如果您收到:

  

$ Scope未在Scope中定义。$ scope.Refresh1   (publishmanifest.js:44)在Scope。$ scope.Save(publishmanifest.js:37)   at $ parseFunctionCall(angular.js:12345)at angular-touch.js:472 at   范围。$ eval(angular.js:14401)在Scope。$ apply(angular.js:14500)at at   HTMLButtonElement。 (angular-touch.js:471)at   HTMLButtonElement.n.event.dispatch(jquery.min.js:3)at   HTMLButtonElement.r.handle(jquery.min.js:3)

您没有在$state中注入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

答案 2 :(得分:0)

如何在$http处理程序中调用save中的刷新?

像这样:

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

答案 3 :(得分:-1)

只需制作第三个功能:

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