如何根据AngularJS的局部视图动态更改标题?

17 浏览
0 Comments

如何根据AngularJS的局部视图动态更改标题?

我正在使用ng-view来包含AngularJS的局部视图,并希望根据被包含的视图更新页面标题和h1标题标签。尽管这些标签在局部视图控制器之外,但我无法想出如何将它们绑定到控制器中设置的数据。

如果是ASP.NET MVC,可以使用@ViewBag来完成这个任务,但我不知道在AngularJS中的等效方法。我已经搜索了有关共享服务、事件等方面,但仍无法使其正常工作。任何修改我的示例以使其正常工作的方法都将不胜感激。

我的HTML:


 


我的JavaScript:

var myModule = angular.module('myModule', []);
myModule.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
        when('/test1', {templateUrl: 'test1.html', controller: Test1Ctrl}).
        when('/test2', {templateUrl: 'test2.html', controller: Test2Ctrl}).
        otherwise({redirectTo: '/test1'});
}]);
function Test1Ctrl($scope, $http) { $scope.header = "Test 1"; 
                                  /* ^ how can I put this in title and h1 */ }
function Test2Ctrl($scope, $http) { $scope.header = "Test 2"; }

admin 更改状态以发布 2023年5月22日
0
0 Comments

你可以在 级别定义控制器。

 
   
     {{ Page.title() }}
 ...

你可以创建服务:Page,并从控制器进行修改。

myModule.factory('Page', function() {
   var title = 'default';
   return {
     title: function() { return title; },
     setTitle: function(newTitle) { title = newTitle }
   };
});

从控制器中注入 Page 并调用 'Page.setTitle()'。

这是一个具体的示例:http://plnkr.co/edit/0e7T6l

0
0 Comments

我刚刚发现了一个设置页面标题的好方法,如果你正在使用路由的话:

JavaScript:

var myApp = angular.module('myApp', ['ngResource'])
myApp.config(
    ['$routeProvider', function($routeProvider) {
        $routeProvider.when('/', {
            title: 'Home',
            templateUrl: '/Assets/Views/Home.html',
            controller: 'HomeController'
        });
        $routeProvider.when('/Product/:id', {
            title: 'Product',
            templateUrl: '/Assets/Views/Product.html',
            controller: 'ProductController'
        });
    }]);
myApp.run(['$rootScope', function($rootScope) {
    $rootScope.$on('$routeChangeSuccess', function (event, current, previous) {
        $rootScope.title = current.$$route.title;
    });
}]);

HTML:




    myApp
...

编辑:使用ng-bind属性而不是大括号{{}},这样它们在加载时不会显示

0