2017-05-04 7 views
1

여러보기에 대해 동일한 컨트롤러를 사용합니다. 내가 취한 경로에 따라 컨트롤러를 다르게 매개 변수화하려고합니다.AngularJS : 경로를 통해 컨트롤러 매개 변수화

기본적으로 뷰는 동일한 각도 ui 그리드를 표시하므로 동일한 컨트롤러입니다. 그러나 특정보기에서는 특정 데이터에 대해 표를 미리 필터링하는 반면, 다른보기에서는 그렇지 않습니다.

어떻게하면됩니까?

app.config(function ($routeProvider) { 
    $routeProvider 
     .when('/foo', 
      { 
       controller: 'Ctrl', 
       templateUrl: '/foo.html', 
      }) 
     .when('/bar', 
      { 
       controller: 'Ctrl', 
       templateUrl: '/bar.html', 
      }); 
}); 

app.controller('Ctrl', ['$scope' function ($scope) { .. }]); 
+0

매개 변수화 란 무엇입니까? –

+0

질문을보다 구체적으로 업데이트했습니다. – hansi

답변

1

기본 수준에서 current route을 검사하여 어떤 템플릿이 사용되고 있는지 확인하고 분기 할 수 있습니다.

app.controller('Ctrl', function($route) { 
    if ($route.current.templateUrl === '/foo.html') { 
    doFoo(); 
    } else { 
    doBar(); 
    } 
}); 

각 경로마다 다른 템플릿을 사용하는 경우에만 작동합니다. 동일한 템플릿을 다시 사용하려면 resolve property of the route이 매우 유용합니다.

app.config(function($routeProvider) { 
    $routeProvider.when('/foo', { 
    controller: 'Ctrl', 
    templateUrl: '/foo.html' 
    resolve: { 
     whichRoute: function() { return 'foo'; } 
    } 
    }); 
}); 

app.controller('Ctrl', function(whichRoute) { 
    if (whichRoute === 'foo') { 
    doFoo(); 
    } else { 
    doBar(); 
    } 
}); 

그리고보다 더 나은

resolve 속성 값 또는 약속을 반환하는 함수를 받아 들일 수있다, 그래서 당신은 거기에 데이터의 사전 필터링을 할 수 있습니다.

app.config(function($routeProvider) { 
    $routeProvide.when('/foo', { 
    controller: 'Ctrl', 
    templateUrl: '/foo.html', 
    resolve: { 
     dataToDisplay: function(YourDataService) { 
     return YourDataService.getSomeData(); 
     } 
    } 
    }); 
}); 

app.controller('Ctrl', function(dataToDisplay) { 
    doTheThing(dataToDisplay); 
}); 
+0

감사합니다! 내가 뭘 찾고 있었는지. – hansi

2

그런 식으로 생각하십시오. 하나의 필터가 있고 하나는없는 필터를 제외하고 두 경로가 동일합니다.

app.config(function ($routeProvider) { 
$routeProvider 
    .when('/foo/:filter?', 
     { 
      controller: 'Ctrl', 
      templateUrl: '/foo.html', 
     }) 
}); 

및 컨트롤러에 당신이 $routeParams.filter 물음표 매개 변수는 선택 사항이 될 것입니다해야합니다 : 그래서 실제로는 추가 매개 변수 filter='some'과 같은 경로를 잘하므로 구성이 같을 수 있습니다. 그런 다음 Ctrl에서 필터 매개 변수를 찾고 필터를 적절하게 렌더링하는 것이 좋습니다. 보기를 그대로 유지하면 어쨌든 그리드를 필터링 할 수 있습니다. 필터 매개 변수가 존재하지 않으면 그냥 같은 데이터를 반환합니다 (필터링되지 않음)

희망이 있습니다.

+0

이것이 올바른 방법입니다. 다른 대답은 각색에 대한 해킹입니다. 선택적 쿼리 매개 변수가 있습니다. – chairmanmow