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
      });
   }
}

しかし、ウェブサイト(ハッシュナビ)で自分の場所を変更したときに、自分のページが更新されていません...助けてください。私のサイトのフルバージョン: 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 に答える