Как связать данные в элементе title, используя angular.js
Я изучаю Angular.js и я установил <title>{{title}}</title>
и я пытаюсь изменить это, используя элемент выбора
<select ng-model="user.title">
<option value="Lorem">Lorem</option>
<option value="Ipsum">Ipsum</option>
<option value="Dolor">Dolor</option>
</select>
я попробую ng-change
а также ng-select
с set()
function ctrl($scope) {
$scope.title = 'hello'; // this set the title
$scope.set = function() {
$scope.title = $scope.user.title; // this not
};
}
Функция не работает, но она работает, когда я просто установил ее без функции.
Я также пытаюсь создать директиву change:
app.directive('change', function() {
console.log('change');
return {
link: function(scope, element, attrs) {
console.log(arguments);
element[0].onChange = function() {
scope[attrs[0]]();
};
}
};
});
но это тоже не работает. Console.log не выполняется вообще.
5 ответов
Все должно работать без лишнего кода:
<html data-ng-app="app">
<head>
<title>{{title}}</title>
</head>
<body>
{{title}}
<select ng-model="title">
<option value="Lorem">Lorem</option>
<option value="Ipsum">Ipsum</option>
<option value="Dolor">Dolor</option>
</select>
</body>
</html>
И это все. Вот ручка.
При работе с тегом title вы должны использовать ng-bind-template, чтобы вы не увидели выражение в исходном состоянии. {{someVar}}
до того, как Angular получит шанс. Вы можете добавить исходный текст заголовка в тег заголовка, и он будет перезаписан вашим шаблоном.
<html data-ng-app="app">
<head>
<title ng-bind-template="My App - {{title}}">My App - Default Title</title>
</head>
<body>
{{title}}
<select ng-model="title">
<option value="Lorem">Lorem</option>
<option value="Ipsum">Ipsum</option>
<option value="Dolor">Dolor</option>
</select>
</body>
</html>
Используйте $rootScope
.when('/', {
templateUrl: '/templates/page/home.html',
controller: ['$scope','$rootScope', function ($scope,$rootScope) {
$rootScope.title = 'Учитель24.рф';
}]});
Я выяснил одно решение, чтобы установить заголовок в <title>
тег.
main.js:
app = angular.module('myApp', ['ngRoute']);
app.config(['$routeProvider', '$locationProvider', function($routeProvider,$locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider.
when("/faq", {
controller: "MYCtrl",
templateUrl: "../assets/templates/faq.html",
title: "FAQ"
});
}]);
app.run(['$location', '$rootScope', function( $location, $rootScope ){
$rootScope.$on("$routeChangeSuccess", function(event, currentRoute, previousRoute) {
$rootScope.title = currentRoute.title;
});
}]);
application.html.erb:
<title ng-bind="'MYAPP - ' + $root.title"></title>
Поскольку @madhead дал вам отличный ответ, я просто хочу пролить свет на ваш вопрос о том, почему ваш код не работает.
Вы можете определенно использовать ng-change
Пожалуйста, посмотрите на этот код. Ваш подход очень близок, и я думаю, может быть, вы что-то упустили?
<ul ng-app="myapp" ng-controller="MainCtrl">
<div>{{title}}</div>
<select ng-model="user.title" ng-change="set()">
<option value="Lorem">Lorem</option>
<option value="Ipsum">Ipsum</option>
<option value="Dolor">Dolor</option>
</select>
</ul>
function MainCtrl($scope) {
$scope.set = function () {
$scope.title = $scope.user.title;
};
}
Я хочу указать на одну вещь. Если вы тестируете в jsfiddle, не используйте <title>{{title}}</title>
использовать <div>{{title}}</div>
вместо. Каким-то образом заголовок тега не будет отображаться правильно в демонстрационном окне.