2017-07-05 13 views
0

を送信、私はそれがnull来れば、それだけで機能を実行いけない、私はパラメータを受け取るAngularCtrlを持っている:角度コントローラの原因到達不能機能からヌルパラメータ

HTML:

<button type="submit" class="btn blue" ng-click="insertar();">Accept</button> 

角度コントローラあなたが見ることができるように

$scope.catalogoPadre = $stateParams.catalogopadre; 

     if ($scope.catalogoPadre != null) { 
      cargarCatalogo(); 
     } 

     function cargarCatalogo() { 
      apiService.get("../../api/Catalogo/GetCatalogoPadre/" + $scope.Catalogo + "/", null, 
       function (res) { 
        $scope.Catalogos = res.data; 

        $scope.selected = $scope.Catalogos[0]; 
        inicial 
        $scope.filtro($scope.selected); 
       }, errorCatalogo); 

cargarCatalogoは、私は私はそれが正しく実行さcargarCatalogo()機能に入る$scope.selected.IDを含むすべてのパラメータを送信する場合、insertar機能(つまり、ビューのng-clickにある)を実行しようとすると、select

問題がある移入単純なクエリであるが、 $scope.selected.IDせずに実行したいのであれば、私はdebbugクロームコンソールでinsertarの機能に達しません。

角度コントローラー第二部が間違っている可能性が何

  $scope.filtro = function (selected) { 

       $scope.selectedID = selected.ID; 

       $scope.insertar = insertar; 


       function insertar() { 

        if ($scope.catalogoid != null) { 
         var url = "../../api/Catalogo/UpdateCatalogoRegistro/" + $scope.Codigo + "/" + $scope.Nombre + "/" + $scope.catalogoid + "/" + $scope.Catalogo; 
         if ($scope.selected.ID != null) { 
          url = url + "/" + $scope.selected.ID; 
         } 
         apiService.post(url , null, 
          function (response) { 
           bootbox.alert("Operación Exitosa!"); 
           $state.go("root.catalogosgenericos"); 
          }, 
          function (response) { 

           } 
          }); 
        } 

?なぜ私は私が検証

if ($scope.selected.ID != null) { 
     url = url + "/" + $scope.selected.ID; 
      } 

よろしくを持っている場合は、すべての偶然にを送っていけない場合$scope.insertar = insertar;が実行'dont

更新:

私はalphapilgrimコメントとしてコードを変更しますが、それはまだ火にinsertarアクション時にいけません

$scope.selected.IDがnull

コードが来ます

function cargarCatalogo() { apiService.get("../../api/Catalogo/GetCatalogoPadre/" + $scope.Catalogo + "/", null, function (res) { . $scope.Catalogos = res.data; $scope.selected = $scope.Catalogos[0]; $scope.filtro($scope.selected); }, errorCatalogo); $scope.filtro = function (selected) { $scope.selectedID = selected.ID; $scope.insertar = function() { $scope.selectedID = selected.ID; if ($scope.catalogoid != null) { var url = "../../api/Catalogo/UpdateCatalogoRegistro/" + $scope.Codigo + "/" + $scope.Nombre + "/" + $scope.catalogoid + "/" + $scope.Catalogo; if ($scope.selected.ID != null) { url = url + "/" + $scope.selected.ID; } apiService.post(url, null, function(response) { bootbox.alert("Operación Exitosa!"); $state.go("root.catalogosgenericos"); }, function(response) { if (response.status == "500") { window.location = "/"; } else { bootbox.alert(response.status + " " + response.statusText + "<br/>" + response.data.errores); } }); } 

全体のHTML

<div class="page-head"> 
    <div class="page-title"> 
    <h1> 
       Cat&aacute;logos Gen&eacute;ricos 
       <small>Nuevo Registro de: {{tipoCatalogo}}</small> 
      </h1> 
    </div> 
</div> 
<div class="row"> 
    <div class="col-md-12"> 
    <!-- BEGIN Portlet PORTLET--> 
    <div class="portlet box blue"> 
     <div class="portlet-title"> 
     <div class="caption"> 
      Cat&aacute;logos 
     </div> 
     <div class="tools"> 
      <a href="javascript:;" class="collapse" data-original-title="" title=""> </a> 
      <!-- <a href="javascript:;" class="reload" data-original-title="" title=""> </a>--> 
      <a href="javascript:;" class="fullscreen" data-original-title="" title=""> </a> 
     </div> 
     </div> 
     <div class="portlet-body"> 
     <!-- PITE - INICIA TABS --> 
     <div class="row"> 
      <div class="col-md-12"> 
      <!-- BEGIN Portlet PORTLET--> 
      <div class="portlet box red"> 
       <div class="portlet-title"> 
       <div class="caption" id="tab_titulo"> 
        Nuevo registro de: {{tipoCatalogo}} 
       </div> 
       <div class="tools"> 
        <a href="javascript:;" class="collapse"> </a> 
        <a href="javascript:;" class="reload" ng-click="fill(conductor.ID); actualizardoctos();"> </a> 
        <a href="javascript:;" class="fullscreen"> </a> 
       </div> 
       </div> 
       <div class="portlet-body"> 
       <div class="tab-content"> 
        <div class="tab-pane fade active in" id="tab_2_1"> 

        <div class="form-group"> 
         <form id="detalle" name="detalle"> 
         <div class="row"> 
          <div class="col-xs-12 col-sm-6 col-md-4"> 
          <div class="form-group"> 
           <label> Código: </label> 
           <input type="text" class="form-control" id="Codigo" name="Codigo" ng-model="Codigo" maxlength="3" required/> 
           <span ng-show="detalle.Codigo.$error.maxlength || detalle.Codigo.length" class="required">El Código debe contener 3 caracteres</span> 
          </div> 
          </div> 
          <div class="col-xs-12 col-sm-6 col-md-4"> 
          <div class="form-group"> 
           <label> Nombre: </label> 
           <input type="text" class="form-control" id="Nombre" name="Nombre" ng-model="Nombre" maxlength="255" required /> 
          </div> 
          </div> 
          <div class="col-xs-12 col-sm-4 col-md-4"> 
          <div class="form-group" ng-init="cargarCatalogo()"> 
           <label ng-hide="Catalogos.length==0">Catalogo Padre: </label> 

           <select class="form-control" ng-hide="Catalogos.length==0" ng-change="filtro(selected)" ng-model="selected" ng-options="item.Nombre for item in Catalogos "></select> 
           <br /> 
          </div> 
          </div> 
         </div> 

         <hr width="100%" style="color: #2F353B;"> 
         <div class="form-actions"> 
          <div class="row"> 
          <div class="text-right col-md-12"> 
           <button type="submit" class="btn blue" ng-click="insertar();">Aceptar</button> 
           <button type="button" class="btn default" ng-click="regresar();">Cancelar</button> 
          </div> 
          </div> 
         </div> 
         </form> 
        </div> 

        </div> 
       </div> 
       </div> 
      </div> 
      </div> 
     </div> 
     </div> 
    </div> 
    </div> 
</div> 
<div ui-view> </div> 
+1

あなたはfiltroの内側insertarを持って、そしてあなたのつもりが、ビューにそれを使用する場合、なぜスコープ機能insetarしません。 – alphapilgrim

+0

私はそれをどうすればいいのか説明できますか?私は本当にJavascriptとAngularに悩まされています。それは私の特典ではありません:/あなたは '$ scope.insertar = insertar; 'をろ過器の外に使うようなことを言っていますか?@alphapilgrim – Ledwing

答えて

0

あなたは$スコープにメソッドを取り付けるcontrollerAs構文を使用しないで検討すべきです。これは少しのリファクタリングを必要としますが、より洗練されたコードになります。

はここcontrollerAs構文にあなたのコードの簡易版を変換示すplnkrです:http://plnkr.co/edit/yZuB5eEiZW15sNzqBIGS?p=previewコメントで述べたようalphapilgrim

は、あなたのinsertar方法がfiltroの内部で定義されています。 filtroメソッドが呼び出されない場合は、insertarはnullになります。

を参照してください。これは、controllerAs構文に切り替える方法についての非常に優れた入門書です。あなたの正気に努力する価値があります。これに代えて

0

if ($scope.catalogoPadre != null) { 
     cargarCatalogo(); 
    } 

を使用してください:

if ($scope.catalogoPadre) { 
     cargarCatalogo(); 
    } 

それがより一般的だと、それはまた、未定義のためにチェックするので、あなたの問題を解決することがあります。

0

ボタンをそのままの状態にして、insetarの機能を有効なスコープの機能に変更することができます。これはあなたに行く必要があります。これで関数を起動する必要があります。欠けているものに調整する必要があります。

$scope.insertar = function() { 
    $scope.selectedID = selected.ID; 
    if ($scope.catalogoid != null) { 
    var url = "../../api/Catalogo/UpdateCatalogoRegistro/" + $scope.Codigo + "/" + $scope.Nombre + "/" + $scope.catalogoid + "/" + $scope.Catalogo; 
    if ($scope.selected.ID != null) { 
     url = url + "/" + $scope.selected.ID; 
    } 
    apiService.post(url, null, 
     function(response) { 
     bootbox.alert("Operación Exitosa!"); 
     $state.go("root.catalogosgenericos"); 
     }, 
     function(response) { 

     } 
    }); 
}; 
+0

あなたのコメントは変更しますが、 '$ scope.selected.ID'がnullの場合、私は問題のコードの更新を投稿します。何か案は? – Ledwing

+0

@Ledwingは、あなたのHTMLのより多くを共有できますか、多分スコープの問題です。ボタンがコントローラにアクセスできない可能性があります。 – alphapilgrim

+0

私はHTMLページ全体を投稿していますが、何も問題がないと思っています。あるいは選択した 'ng-hide'で何かできますか? – Ledwing

関連する問題