답변:
다른보기를 전환하기 위해 index.html 파일에서 window.location ($ location 서비스 사용)을 직접 변경할 수 있습니다.
<div ng-controller="Cntrl">
<div ng-click="changeView('edit')">
edit
</div>
<div ng-click="changeView('preview')">
preview
</div>
</div>
Controller.js
function Cntrl ($scope,$location) {
$scope.changeView = function(view){
$location.path(view); // path not hash
}
}
https://github.com/angular/angular-seed/blob/master/app/app.js 와 같이 위치에 따라 라우터가 다른 부분으로 전환되도록 구성하십시오 . 이것은 ng-view를 사용하는 것뿐만 아니라 역사의 이점을 가질 것입니다.
또는 ng-include를 다른 부분과 함께 사용한 다음 여기에 표시된대로 ng-switch를 사용하십시오 ( https://github.com/ganarajpr/Angular-UI-Components/blob/master/index.html )
<a href="https://stackoverflow.com/edit">Edit</a>
Angular는 클릭으로 인해 페이지가 다시로드되지 않도록합니다. 원하는 경우 다시로드를 트리거하도록이 동작을 수정할 수 있습니다.
제공된 답변은 절대적으로 정확하지만 좀 더 역동적으로 수행하려는 향후 방문자를 위해 확장하고 싶었습니다.
보기에서-
<div ng-repeat="person in persons">
<div ng-click="changeView(person)">
Go to edit
<div>
<div>
컨트롤러에서-
$scope.changeView = function(person){
var earl = '/editperson/' + person.id;
$location.path(earl);
}
수락 된 답변과 동일한 기본 개념으로 약간의 동적 내용을 추가하여 조금 향상시킵니다. 수락 된 답변이 이것을 추가하고 싶다면 내 답변을 삭제합니다.
url
는 실제로 프로토콜 (http : //) 및 모든 것을 포함하여 전체 웹 주소입니다. $location.path()
변수에서 알 수 있듯이 으로 더 잘 설명됩니다 path
.
예제가 작동합니다.
내 문서 모양은 다음과 같습니다.
<html>
<head>
<link rel="stylesheet" href="css/main.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular-resource.min.js"></script>
<script src="js/app.js"></script>
<script src="controllers/ctrls.js"></script>
</head>
<body ng-app="app">
<div id="contnr">
<ng-view></ng-view>
</div>
</body>
</html>
내 부분은 다음과 같습니다.
<div id="welcome" ng-controller="Index">
<b>Welcome! Please Login!</b>
<form ng-submit="auth()">
<input class="input login username" type="text" placeholder="username" /><br>
<input class="input login password" type="password" placeholder="password" /><br>
<input class="input login submit" type="submit" placeholder="login!" />
</form>
</div>
내 Ctrl의 모양은 다음과 같습니다.
app.controller('Index', function($scope, $routeParams, $location){
$scope.auth = function(){
$location.url('/map');
};
});
응용 프로그램은 내 모듈입니다.
var app = angular.module('app', ['ngResource']).config(function($routeProvider)...
이것이 도움이 되길 바랍니다.
이 질문에 대한 이전의 모든 답변에 사용 된 방법은 필요하지 않은 URL 변경을 제안하며 독자는 대체 솔루션을 알고 있어야한다고 생각합니다. ui-router와 $ stateProvider를 사용하여 상태 값을보기의 html 파일을 가리키는 templateUrl과 연결합니다. 그런 다음 컨트롤러에 $ state를 주입하고 $ state.go ( 'state-value')를 호출하여 뷰를 업데이트하면됩니다.
이를위한 두 가지 방법이 있습니다.
ui-router 또는를 사용하는 경우 다음과 $stateProvider
같이하십시오.
$state.go('stateName'); //remember to add $state service in the controller
각도 라우터 또는를 사용하는 경우 다음과 $routeProvider
같이하십시오.
$location.path('routeName'); //similarily include $location service in your controller
기본 라우팅 (# / ViewName) 환경을 완전히 개선하지 않고도 Cody의 팁을 약간 수정하여 제대로 작동 할 수있었습니다.
컨트롤러
.controller('GeneralCtrl', ['$route', '$routeParams', '$location',
function($route, $routeParams, $location) {
...
this.goToView = function(viewName){
$location.url('/' + viewName);
}
}]
);
보기
...
<li ng-click="general.goToView('Home')">HOME</li>
...
이 솔루션을 사용하게 된 것은 Kendo Mobile UI 위젯을 각도 환경에 통합하려고 시도했을 때 컨트롤러의 컨텍스트를 잃어 버렸고 일반 앵커 태그의 동작도 하이재킹되었습니다. Kendo 위젯 내에서 컨텍스트를 다시 설정하고 탐색하는 방법을 사용해야했습니다 ...이 작동했습니다.
이전 게시물에 감사드립니다!
Firstly you have to create state in app.js as below
.state('login', {
url: '/',
templateUrl: 'views/login.html',
controller: 'LoginCtrl'
})
and use below code in controller
$location.path('login');
희망이 당신을 도울 것입니다
이 작은 기능은 저에게 잘 도움이되었습니다.
//goto view:
//useage - $scope.gotoView("your/path/here", boolean_open_in_new_window)
$scope.gotoView = function (st_view, is_newWindow)
{
console.log('going to view: ' + '#/' + st_view, $window.location);
if (is_newWindow)
{
$window.open($window.location.origin + $window.location.pathname + '' + '#/' + st_view, '_blank');
}
else
{
$window.location.hash = '#/' + st_view;
}
};
전체 경로가 필요하지 않습니다. 전환하려는보기 만