2014-10-04 52 views
2

我有一個表單,我用來修改用戶的名稱/電子郵件地址的模式形式。問題是它向服務器發送請求以檢查所有情況下的唯一值,在創建新記錄時很好,但如果我正在修改某些內容,我想忽略當前值。 這裏是彈出式的HTML代碼檢查唯一的名稱,並在修改的情況下忽略

<form> 
    <input type="text" ng-model="username" unique-url="/test/to/unique" /> 
</form> 

這種模式形式是通過改變模型值加載,這樣

$scope.showModal = function(row) { 
    $scope.username = row.name; 
    showTheFormModal(); 
} 

這裏是指令

myAPP.directive('uniqueUrl', ['$http', function($http) { 
    return { 
     require: 'ngModel', 
     link: function(scope, ele, attrs, c) { 

      var url = attrs.uniqueNameUrl + '?'; 

      scope.$watch(attrs.ngModel, function() { 

       $http({ 
        method: 'GET', 
        url: url + $.param({'name': ele.val()}) 
       }).success(function(isUnique,status,headers,cfg) { 
         var iu = isUnique == 'true' ? true : false; 
         c.$setValidity('unique', iu); 
        }).error(function(data,status,headers,cfg) { 
         c.$setValidity('unique', false); 
        }); 
      }); 
     } 
    } 
}]) 
+0

也許它是有道理的更好地解決它在服務器上? – dfsq 2014-10-04 08:05:48

+0

我可以修復服務器,但是由於ng-model的值正在根據不同的行進行更改,所以不知道每次打開彈出窗口時如何跟蹤原始值 – FarazShuja 2014-10-04 08:17:13

回答

0

如何做服務器而不是客戶端的唯一性檢查。將數據庫ID從服務器傳回並與用戶名和密碼一起存儲。然後,客戶可以檢查id的值並將其發送給未來的請求。然後有一個額外的$ http放置路線。使用$ http put來編輯現有數據庫條目。

$http.put('/route/' + id, UpdatedData) 

$http.get('/route/')