2015-10-30 67 views
1

我有一個問題必須這兒過得在我的應用形式,我的要求是當用戶瀏覽到另一個頁面,而不提交此表一個確認信息將另一個頁面無法正常工作顯示警告用戶使用angular.js.我在下面解釋我的代碼。指令內部形式,而移動到使用Angular.js

<form name="billdata" id="billdata" confirm-on-exit enctype="multipart/form-data" novalidate> 
    <span class="input-group-addon ndrftextwidth text-right" style="width: 180px;">First Name :</span> 
    <input type="text" name="itemname" id="contactno" class="form-control" placeholder="user Name" ng-model="first_name"> 
    <span class="input-group-addon ndrftextwidth text-right" style="width: 180px;">Last Name :</span> 
    <input type="text" name="itemname" id="contactno" class="form-control" placeholder="user Name" ng-model="last_name"> 
    <div style="text-align: center; padding-top: 10px;"> 
     <input type="button" class="btn btn-success" ng-click="addUserData(billdata);" id="addProfileData" value="submit" /> 
    </div> 
</form> 

而我在我的控制器頁面中有以下代碼。

dashboard.directive('confirmOnExit', function() { 
    return { 
      link: function($scope, elem, attrs) { 
       window.onbeforeunload = function(){ 
        if ($scope.billdata.$dirty) { 
         return "The form is not saved, do you want to stay on the page?"; 
        } 
       } 
       $scope.$on('$locationChangeStart', function(event, next, current) { 
        if ($scope.billdata.$dirty) { 
         console.log('next',next,current); 
         if(!confirm("The form is not saved, do you want to stay on the page?")) { 
          event.preventDefault(); 
         }else{ 
          console.log('hii'); 
         } 
        } 
       }); 
      } 
     }; 
}); 

這裏我得到確認消息時,用戶完全離開頁面site.But我的要求是當用戶瀏覽到另一個頁面,而不提交這種形式的確認消息應該display.Please幫助我。

+0

看一看在這個詳細的解釋你正在尋找什麼。 http://weblogs.asp.net/dwahlin/cancelling-route-navigation-in-angularjs –

+0

@ J-D:我還沒有清楚這一點前訪問過這個網站。 – subhra

+0

如果你不想離開頁面,如果表單是原始的,那麼你需要在if之外也有防止默認的,因爲在這裏當表單不髒時我們不進入條件,然後位置被允許繼續......嘗試在if之外添加event.preventDefault()以及$ dirty並不意味着提交了$ submit屬性,如果你不關心有效性和$有效,如果你這樣做 –

回答

2

好了,所以我創建了一個小的項目有兩個途徑。演示如何做你想要的東西...這是你的代碼段這樣剛剛從它採取什麼你需要

該指令已被更改爲:

.directive('confirmOnExit', function() { 
return { 
    require:'form', 
     link: function($scope, elem, attrs,formController) { 
      window.onbeforeunload = function(){ 
       if (formController.$dirty) { 
        return "The form is not saved, do you want to stay on the page?"; 
       } 
      } 
       $scope.$on('$locationChangeStart', function (event, next, current) { 
      if (formController.$dirty) { 
       if (!confirm("The form is dirty, do you want to stay on the page?")) { 
        event.preventDefault(); 
       } 
      } 
     }); 
      } 
    }; 

});

不是我添加了需要的形式,使其泛型要使用所有形式。

這隻會考慮$髒的,所以如果你還想$無效添加條件和$提交以及

**這裏是一個** PLUNKER與工作示例...

+0

@Jony-Y:它看起來不錯。你能告訴我什麼是'formController'嗎? – subhra

+0

可以肯定的是,當你在這種情況下將'require'添加到指令'angular'時,angular實際上會將表單傳遞給指令以允許您訪問它...因此,您可以使用表單控制器函數,例如$ dirty或$ setDirty ()等,你可以使用require來達到很多目的,如果你想了解更多的細節,請查看https://docs.angularjs.org/guide/directive-和require部分 –

+0

@Jony-Y:無論如何thanks.Its工作按照要求。 – subhra