1

Я использовал эту архитектуру во всем приложении, но она здесь не работает, и я не могу понять, почему.ui-router w/специфическое дочернее состояние только отображает JSON на странице обновления, нет представления

Я загружаю данные виски в мое родительское виски, которое должно передавать данные дочерним состояниям. Он работает нормально, но обновляется на странице - он отображает только данные json для виски на странице.

Угловой, похоже, не загружается, так как инструмент ng-inspector не обнаруживает его.

//parent state with resolve to retrieve whiskey from service 
.state('whiskey', { 
      url: '/whiskey/{whiskeyId}', 
      abstract: true, 
      sticky: true, 
      params: { 
       post: null, 
       index: null 
      }, 
      resolve: { 
       whiskey: [ 
      'Whiskey', 
      '$stateParams', 
      function (Whiskey, $stateParams) { 
      console.log('$stateParams ', $stateParams) 
      return Whiskey.show($stateParams.whiskeyId).then(function (whiskey) { 
       return whiskey 
      }) 
     } 
     ]}, 
      views: { 
       'main': { 
        templateUrl: '/views/whiskey/whiskey-header.html', 
        controller: 'Whiskey-headerCtrl' 
       } 
      } 
     }) 

//child state does not work on page refresh, just shows json data 
.state('whiskey.whiskey-post', { 
      url: '', 
      views: { 
       'whiskey-child': { 
        templateUrl: '/views/whiskey/whiskey-post.html', 
        controller: 'Whiskey-postCtrl' 
       } 
      } 
     }) 

//child state is working fine 
.state('whiskey.whiskey-about', { 
      url: '/about', 
      views: { 
       'whiskey-child': { 
        templateUrl: 'views/whiskey/whiskey-about.html', 
        controller: 'Whiskey-aboutCtrl' 
       } 
      } 
     }) 

Моя служба:

'use strict'; 
angular.module('clientApp').factory('Whiskey', function ($http, $q) { 
    var currentWhiskey = { _id: 'init' }; 
    return { 
    show: function (whiskeyId) { 
     if (currentWhiskey._id !== whiskeyId) { 
     return $http.get('whiskey/' + whiskeyId).then(function (res) { 
      currentWhiskey = res.data; 
     return $q.when(currentWhiskey); 
     }); 
     } else { 
     return $q.when(currentWhiskey); 
     } 
    }, 

}); 

Я также добавлю свои контроллеры ниже:

//whiskey-header ctrl for parent state 
'use strict'; 
    angular.module('clientApp').controller('Whiskey-headerCtrl', function (  $scope, whiskey) { 

    $scope.whiskey = whiskey; 

}); 

виски пост управления:

'use strict'; 
angular.module('clientApp').controller('Whiskey-postCtrl', function ($state, $scope, Post, PostVote, Whiskey, $location, Voter) { 

    $scope.post = []; 

    $scope.queryObject = { 
    sorter: 'timestamp', 
    sort: { 'timestamp': -1 }, 
    skip: 0 
    }; 

    $scope.sort = function (a) { 
    var ascend = {}; 
    ascend[a] = 1; 
    var descend = {}; 
    descend[a] = -1; 
    if (_.isMatch($scope.queryObject.sort, descend)) { 
     $scope.queryObject.sort = ascend; 
     $scope.queryObject.sorter = a; 
    } else if (_.isMatch($scope.queryObject.sort, ascend)) { 
     $scope.queryObject.sort = descend; 
     $scope.queryObject.sorter = a; 
    } else { 
     $scope.queryObject.sort = descend; 
     $scope.queryObject.sorter = a; 
    } 
    $scope.post = []; 
    $scope.isBusy = false; 
    $scope.queryObject.skip = 0; 
    $scope.loadMore(); 
    }; 

    $scope.loadMore = function() { 
    if ($scope.isBusy === true) { 
     return; 
    } 
    $scope.isBusy = true; 
    Post.getPost({ 
     'queryObject': $scope.queryObject, 
     'filter': { 'whiskey': $scope.whiskey._id } 
    }).then(function (res) { 
     if (!res.data.length) { 
     $scope.isBusy = true; 
     return; 
     } 
     if (res.data.errmsg) { 
     toastr.error(res.data.errmsg); 
     } else { 
     if ($scope.post) { 
      $scope.post.push.apply($scope.post, res.data); 
     } else { 
      $scope.post = res.data; 
     } 
     $scope.queryObject.skip += res.data.length; 
     $scope.isBusy = false; 
     } 
    }); 
    }; 

    $scope.loadMore(); 
}); 

ответ

0

понял.

Это был конфликт с моим серверным кодом.

Я использую режим «довольно-urls»/html5, который удаляет хэш из URL-адреса браузера.

что состояние соответствует этому маршруту на моем сервере:

app.get('/whiskey/:id', whiskeys.show); 

Таким образом, именно поэтому он посылает обратно чистый JSON для запроса.

+1

См. Https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode для конфигурации правила перезаписи для общие серверы –

 Смежные вопросы

  • Нет связанных вопросов^_^