Контроллер получает вызов дважды из-за добавления параметров в URL-адрес
Я в angularjs. Я пытаюсь добавить параметр в url, используя $location.search('sid', key);
. Значение ключа поступает с другого сервера по запросу http.
Вот код для параметра append.
.config(['$routeProvider',function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'test1.html',
controller: 'test1Controller'
})
.when('/message/:userId', {
templateUrl: 'test2.html',
controller: 'test2Controller'
})
.otherwise({
redirectTo: '/'
});
}])
.run(['$route', '$rootScope', '$location' ,'getAuthDetails', function($route, $rootScope, $location,getAuthDetails) {
var key;
getAuthDetails.get().then(function(data){
key = data.key;
$rootScope.query = 'sid='+key;
console.log($location.$$path);
$location.search('sid', key); //append parameter. This is calling controller twice
});
$rootScope.$on('$routeChangeSuccess', function () {
$rootScope.query = 'sid='+key;
});
}]);
У меня есть проблема. Поскольку sid добавляется в url. console.log
я помещается в test1Controller
, вызывается дважды. Sid используется для соединения с разъемом.
Существует ли какое-либо обходное решение для вызова контроллера после добавления URL-адреса.
Ответы
Ответ 1
Вы можете использовать reloadOnSearch: false
Пример:
.config(['$routeProvider',function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'test1.html',
controller: 'test1Controller',
reloadOnSearch: false // wont reload the controller when the search query changes
})
.when('/message/:userId', {
templateUrl: 'test2.html',
controller: 'test2Controller'
})
.otherwise({
redirectTo: '/'
});
}])
Ответ 2
Убедитесь, что вы пишете контроллер только один раз. напишите либо в ng-контроллере, либо в вашем config-пути:
app.config(['$routeProvider', function($routeProvider){
$routeProvider.when('/',
{
templateUrl: 'pages/home.html'
//Remove controller from here
});
}]);
home.html
<!-- Add the ng-controller in your view -->
<div ng-controller="MyItemsController">
<!-- Your stuff -->
</div>
Попробуйте использовать reloadOnSearch
: false внутри вашей конфигурации, это предотвратит загрузку контроллера.