2016-11-11 9 views
0

特定のユーザーの詳細ビューを表示するには、詳細を表示するリンクをクリックしていましたが、$ uibModalのresolve属性にuserのIDは表示されません。オープン()。しかし、そのidはインラインコントローラ機能にangularjsでモーダルを開いているときにstateparamsを解決できません

.state('dashboard.users',{ 
    url:'/users', 
    cache:false, 
    views:{ 
     'listusers':{templateUrl:'./partials/users/list.tpl.html?time='+ Math.random(),controller:'UsersController'} 
    }, 
    authenticate:true 
}) 
.state('dashboard.users.view',{ 
     url:'/view/:id', 
     parent:'dashboard.users', 
     cache:false, 
     authenticate:true, 
     onEnter:['$uibModal',function ($uibModal) { 
      $uibModal.open({ 
       templateUrl:'./partials/users/view.tpl.html', 
       keyboard:false,backdrop:'static', 
       size:'sm', 
       resolve:{ 
        userData: function($stateParams, $state) { 
         console.log($stateParams.id);// unable to get id 
        } 
       }, 
       controller:function($scope,$uibModalInstance,$state,UsersFactory,userData,$stateParams){ 
        $scope.closeLoginModal=function(){ 
         $uibModalInstance.dismiss('cancel'); 
         $state.go('dashboard.users'); 
        } 
        console.log($stateParams.id); // id is avaliable over here 
       } 
      }); 
     }] 
    }); 

HTML

<tr ng-repeat="i in users"> 
    <td>{{ i.id }}</td> 
    <td>{{ i.name }}</td> 
    <td>{{ i.email }}</td> 
    <td>{{ i.username }}</td> 
    <td>{{ i.website }}</td> 
    <td><a ui-sref="dashboard.users.view({id:i.id})"><button class="btn btn-default btn-xs">View</button></a></td> 
</tr> 

提供されていますが、私が間違って.ANYヘルプが

答えて

0

いくつかのことをいただければ幸いです何かをやっています、まずあなたの質問に答えてください。 onEnterのコールバックdoは、状態の解決にアクセスできます。しかし、あなたのコードでは、解決策がありません。コールバックは機能しません。解決策を状態宣言に移動します。

また、コールバック内にコントローラがあり、どちらも動作しません。コントローラーの宣言は状態に移る必要があり、IMHOは完全に別のファイルに移動する必要があります(必要ないconfig.routesの詰まりを防ぎます)。これにより単体テストも非常に簡単になります。

あなたはonEnterを使用していますが、それを見るのはまれです。すべてのモーダル機能をコントローラ(前述のように別ファイル)に移動し、コントローラのコンストラクタからトリガします。私は、以下のフォーカス取得時の機能で$ stateParamsを問題に

+0

は私が解決して機能をフォーカス取得時に使用する必要がある理由ステートフルモーダルのthatsを使用したいが、どのがある場合、私は感謝です適切な方法avaliable.Also私はコントローラのdefinationはインラインにすべきではないと受け入れる。 – Vibhas

0

ソリューションを注入したサンプルコード

onEnter:['$uibModal','$stateParams',function ($uibModal,$stateParams) { 
      var id = $stateParams.id; 
      $uibModal.open({ 
       templateUrl:'./partials/users/view.tpl.html', 
       keyboard:false,backdrop:'static', 
       size:'sm', 
       resolve:{ 
        userData: function($state) { 
         console.log(id); // id avaliable 
        } 
       }, 
       controller:function($scope,$uibModalInstance,$state,UsersFactory,userData,$stateParams){ 
        $scope.closeLoginModal=function(){ 
         $uibModalInstance.dismiss('cancel'); 
         $state.go('dashboard.users'); 
        } 
        console.log($stateParams); 
       } 
      }); 
     }] 
関連する問題