저는 AngularJS에서 더 새로워졌습니다. 그래서 간단한 질문이 있는데 답을 찾을 수 없습니다. 코드가 있습니다.
angular.module('app', ['app.controllers', 'ngRoute']).
config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/users', {templateUrl: '../pages/list.html', controller: 'UserListCtrl'}).
when('/user-details/:login', {templateUrl: '../pages/form.html', controller: 'UserCtrl' /* and here I need to call userDetails(login) from UserCtrl */}).
otherwise({redirectTo: '/users'});;
}
]);
app.controller('UserCtrl', function ($scope, $http, $location) {
$scope.userDetails = function (login) {
$http.get(url + login).success(function (data) {
$scope.user = data[0];
console.log('tst');
}).error(errorCallback);
};
$scope.createUser = function (user) {
$http.post(url, user).success(function (data) {
$location.path('/users');
}).error(errorCallback);
};
});
내 문제는 라우팅 일치시 컨트롤러의 특정 메서드를 호출하는 방법을 모르겠습니다. 메서드를 호출하고 매개 변수를 제공해야합니다. 라우팅에서 로그인합니다. 이것을 해결하는 방법? 답변 해 주셔서 감사합니다
내가 올바르게 이해한다면,보기의 두 부분 (또는 두 개의보기)에 동일한 컨트롤러를 재사용하고 있습니다. 하나는 사용자 생성 용이고 다른 하나는 현재 사용자의 세부 정보를 가져 오기위한 것입니다.
이 두 가지 측면은 완전히 다르기 때문에 두 가지 모두에 동일한 컨트롤러를 사용하는 것은 바람직하지 않습니다. 컨트롤러는 달라야하며 공통 또는 재사용 가능한 기능은 서비스를 통해 공유해야합니다.
백엔드에 호출해야한다 어떤 경우, 코드에서 하지 컨트롤러 내부에 위치하지만 서비스로 될 수있다. 예 :
app.service('UserSrv', function ($http) {
var url = '...';
this.userDetails = function (login) {
return $http.get(url + login);
};
this.createUser = function (user) {
return $http.post(url, user);
};
});
app.controller('UserCtrl', function ($scope, UserSrv) {
var login = '...';
var errorCallback = ...;
// Fetch user details upon initialiation
UserSrv.userDetails(login).success(function (data) {
$scope.user = data[0];
}).error(errorCallback);
});
app.controller('NewUserCtrl', function ($location, $scope, UserSrv) {
var errorCallback = ...;
$scope.createUser = function (user) {
UserSrv.createUser(user).success(function (data) {
$location.path('/users');
}).error(errorCallback);
};
});
또한 $routeProvider
의 resolve
속성을 사용 하여 사용자의 세부 정보를 "사전로드"하고 인수로 UserCtrl에 전달할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다