2016-02-22 2 views
0

я использую угловой ngTagsInput и мой список похожи:Массива карта ошибки в угловом

[{text: "4353453"}, {text: "453453"}, {text: "4534534"}, {text: "5345"}] 

И изменить его с помощью карты массива, как показано ниже кода:

var array = [{text: "4353453"}, {text: "453453"}, {text: "4534534"}, {text: "5345"}]; 

var new_array = array.map(function(item) { 
return parseInt(item.text); 
}); 

Когда я использую этот код в моем угловом контроллер получил ошибку как:

TypeError: Cannot read property 'map' of undefined 
at new <anonymous> (CustomerPageController.js:208) 
at Object.instantiate (angular.js:4619) 
at angular.js:9870 
at ui-bootstrap-tpls.min.js:8 
at angular.js:15552 
at m.$eval (angular.js:16820) 
at m.$digest (angular.js:16636) 
at m.$apply (angular.js:16928) 
at g (angular.js:11266) 
at t (angular.js:11464) 

Как я могу это исправить?

+1

Ваш код работает нормально. – Daniel

+0

Это не относится к угловым и работает как ожидается [см. Jsfiddle] (https://jsfiddle.net/6jc72yn2/) – scniro

+1

Пожалуйста, поделитесь рабочим примером на plunkr или jsfiddle, воспроизводящим вашу проблему. –

ответ

1

Никакая идея, как теги создаются на $ объеме, но, учитывая, что в настоящее время устанавливается где-то после завершения некоторых асинхронная задача,

$scope.$watch('tags', function (tags) { 
    if (angular.isArray(tags)) { 
     $scope.post.phones = tags.map(function (tag) { 
      return parseInt(tag.text, 10); 
     }); 
    } else { 
     $scope.post.phones = []; 
    } 
}); 
+0

Спасибо, но этот код отправляет только одно число в БД, например, если я набираю '24234234,234234,2434234' один номер, хранящийся – Amirali

0

МОЯ полный контроллер:

AdminApp.controller('StoreCtrl', ['$scope', '$rootScope', '$modalInstance','$http','toaster', function ($scope, $rootScope, $modalInstance,$http,toaster) { 
var maxTags = 6; 

$scope.$watch('tags.length', function(value) { 
    if (value < maxTags) 
    { 
     $scope.placeholder = ' ' + (maxTags - value) + ' شماره دیگر میتوانید ثبت کنید'; 
    } 
    else 
    { 
     $scope.placeholder = 'حداکثر ۶ شماره تماس'; 
    } 
}); 


var array = $scope.tags; 

var new_array = array.map(function(item) { 
    return parseInt(item.text); 
}); 

$scope.post.phones = new_array; 


$scope.create = function(){ 
    $http.post(AppCore.getGlobalApiUrl()+'actual_customer', {"name": $scope.post.name,"last_name": $scope.post.last_name,"phones": $scope.post.phones,"email": $scope.post.email,"default_address": $scope.post.default_address,"default_latitude": $scope.post.default_latitude,"default_longitude": $scope.post.default_longitude,"user_name": $scope.post.user_name,"password": $scope.post.password}) 
     .success(function(response, status, headers, config){ 
      $modalInstance.dismiss('cancel'); 
      toaster.pop('success', "تعریف", "عملیات با موفقیت انجام شد"); 
      setTimeout(function() { 
       window.location.reload(); 
      }, 200); 
      $scope.posts.push(response.posts); 
     }) 
     .error(function(response, status, headers, config){ 
      $scope.error_message = response.error_message; 
     }); 
}; 
$scope.cancel = function() { 
    $scope.post = ""; 
    $modalInstance.dismiss('cancel'); 
    setTimeout(function() { 
     window.location.reload(); 
    }, 200); 
}; 
}]); 
+0

Где определяется $ scope.tags «Похоже, когда вы пытаетесь сопоставить $ scope.tags, он еще не определен.« Undefined »не имеет метода« map() ». – Prashant

+0

почему отправлять 2 ответа для одного вопроса? –

0

Это является мой html-код:

<tags-input placeholder="{{placeholder}}" 
         min-length="1" 
         max-length="11" 
         ng-class="{'read-input': tags.length > 6}" 
         allowed-tags-pattern="^[0-9]+$" max-tags="6" ng-model="tags"></tags-input> 


      <input type="hidden" ng-model="post.phones"> 
Смежные вопросы