$ rootscope。$ with with on

时间:2017-10-04 18:06:18

标签: angularjs broadcast

我对Angular js有疑问  我正在呼吁功能 在HTML中 控制器

    <button  class="btn" ng-click="test()"> Save</button>
    <button  class="btn" ng-click="test();test2()"> New</button>

    $scope.test= function(){
       $http.put(settings.WebApiBaseUrl + 'api/myfile/' , {
            headers: {
                'X-ApiKey': myKey
            }
        }).success(function (data) {          

            $rootScope.$broadcast('data:saved')
            $scope.loading = false;
        }).error(function (data, status, headers, config) {
            $scope.loading = false;               

        });
    }

和我打电话的其他功能

     $scope.test2=function(){ $scope.$on('data:saved', function (event,tags) 
    {
    $http.post(settings.WebApiBaseUrl + 'api/myfile/' , {
            headers: {
                'X-ApiKey': myKey
            }
        }).success(function (data) {  

            $scope.loading = false;
        }).error(function (data, status, headers, config) {
            $scope.loading = false;               

        });
    }}

如果我点击一次它工作正常但我点击第二次它循环第二个功能两次。

1 个答案:

答案 0 :(得分:1)

每次点击时,您都会调用test2()

ng-click="test();test2()"

每次订阅该活动:

$scope.test2=function(){ 
    $scope.$on('data:saved', function (event,tags)

您只想订阅一次,因此每次点击都不应该调用test2()。只需调用一次,并测试test()广播事件并进行处理。