0

我很难过……我煮斧头粥……如果可以的话,请帮我解决我的问题。我的 html 代码中有这个结构(ng-controller 位于 wrap 标签上):

<a ng-repeat="subitem in cur_submenu" ng-href="#/{{subitem.href}}/">{{subitem.name}}</a>

在 JS 中我有: 1) RouteProvider

$routeProvider.
      when('/:lvl1', {
          template:'<div ng-include="htmlUrl">Loading...</div>',
          controller: 'MainCtrl'
      })

2) 控制器

function MainCtrl($scope, $http, $routeParams){
  var lvl = window.location.hash.split('/');
  if ($scope.submenu) {
    //if data was fetch earlier, then set currentMenu
    $scope.cur_submenu = $scope.submenu[lvl[1]];
  } else {
    MainCtrl.prototype.fetchData();
  }

  MainCtrl.prototype = {
    fetchData: function(){
      /*
      * Get data about navigation
      */
      $http({method: 'GET', url: 'data/main.json'}).
      success(function(data){
        $scope.menu = data.menu;
        $scope.submenu = data.submenu;
        $scope.cur_submenu = data.submenu[lvl[1]] //current submenu for my location
      });
   }
}

但是当我在网站(hash-nav)上更改我的位置时,它没有在我的页面上更新......请帮助我。我的网站的完整版:http: //amiu.ru

4

1 回答 1

1

您无需通过原型设计向控制器添加功能。在您的视图中调用的函数将在 $scope 上声明,如下所示:

function MainCtrl($scope, $http, $routeParams){
  var lvl = window.location.hash.split('/');
  if ($scope.submenu) {
    //if data was fetch earlier, then set currentMenu
    $scope.cur_submenu = $scope.submenu[lvl[1]];
  } else {
    $scope.fetchData();
  }

  $scope.fetchData = function(){
      /*
      * Get data about navigation
      */
      $http({method: 'GET', url: 'data/main.json'}).
          success(function(data){
            $scope.menu = data.menu;
            $scope.submenu = data.submenu;
            $scope.cur_submenu = data.submenu[lvl[1]] //current submenu for my location
          });
   };
}

在所有其他情况下,如果您在 $scope 函数之外对 $scope 执行更改,则需要手动调用$scope.$apply()以将摘要排队并更新您的视图。

于 2013-01-24T18:43:38.813 回答