2013-04-15 2 views
0

У меня очень простой сайт, который использует Angular.js для отображения его содержимого. Я начал изучать его 2 дня назад, и после официального учебника не было никаких проблем.

Это мой JS файл:

var Site = angular.module('Website', []); 

Site.config(function ($routeProvider) { 
    $routeProvider 
    .when('/home', {templateUrl: 'parts/home.html', controller: 'RouteController'}) 
    .when('/who', {templateUrl: 'parts/who.html', controller: 'RouteController'}) 
    .when('/what', {templateUrl: 'parts/what.html', controller: 'RouteController'}) 
    .when('/where', {templateUrl: 'parts/where.html', controller: 'RouteController'}) 
    .otherwise({redirectTo: '/home'}); 
}); 

function AppController ($scope, $rootScope, $http) { 
    // Set the slug for menu active class 
    $scope.$on('routeLoaded', function (event, args) { 
     console.log(args); 
     $scope.slug = args.slug; 
    }); 
} 

function RouteController ($scope, $rootScope, $routeParams) { 
    // Getting the slug from $routeParams 
    var slug = $routeParams.slug; 
    var pages = { 
     "home": { 
     "title": "Samuele Mattiuzzo", 
     }, 

     "who": { 
     "title": "All you'll get, won't blog" 
     }, 

     "what": { 
     "title": "Shenanigans about this website" 
     }, 

     "where": { 
     "title": "Where can you find me on the net?" 
     } 
    }; 
    $scope.$emit('routeLoaded', {slug: slug}); 
    $scope.page = pages[slug]; 
} 

Как вы можете видеть, это очень просто, нужно просто вернуть заголовок страницы, основываясь на странице слизня. В шаблоне (где я загружаю свое приложение с <body ng-controller="AppController">), внутри директивы <ng-view> у меня есть один из тех частичных шаблонов, которые загружаются (которые в настоящее время работают и отображают статический контент), но я не вижу содержимого {{page.title}}.

Я Batarang включен в браузере и я проверяю мой сайт с web-server.js, но я читал, что Batarang имеет некоторые проблемы с переменными и областями и всегда возвращает неопределенное значение, так вот почему я добавил, что console.log заявления. Не имеет значения, что я пытаюсь напечатать (args, slug или page, очевидно, в разных частях js), это всегда не определено.

Что я здесь делаю неправильно? Спасибо всем

+0

что контроллер приложения в этом контексте –

+0

обновляется, это просто слушатель для Теперь. Когда это сработает, оно будет служить для загрузки json, где я перемещаю свои заголовки страниц. –

+0

не могли бы вы поделиться файлом? –

ответ

2

Ни один из ваших контроллеров не связан с вашим «сайтом».

Я считаю, что если вы измените свои бесплатные функции, связанные с сайтом, это должно привести вас к правильному пути. Кроме того, вы можете немного упростить свой код, поскольку информация, которую вы ищете, содержится в $ location, а не $ routeParams.

Site.controller("RouteController", function($scope, $location) { 
var slug = $location.path(); 
var pages = { 
    "/home": { 
    "title": "Samuele Mattiuzzo", 
    }, 

    "/who": { 
    "title": "All you'll get, won't blog" 
    }, 

    "/what": { 
    "title": "Shenanigans about this website" 
    }, 

    "/where": { 
    "title": "Where can you find me on the net?" 
    } 
}; 
$scope.page = pages[slug]; 
}); 

Кроме того, в вашем AppController вы можете наблюдать за $ routeChangeSuccess вместо уведомления об изменении местоположения с вашего RouteController:

Site.controller("AppController", function($rootScope) { 
    $rootScope.$on("$routeChangeSuccess", function() { \\do something } 
}); 
+1

не обязательно добавлять контроллеры в модуль, они могут быть зарегистрированы глобально –

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