我正在学习Angular.js并设置<title>{{title}}</title>
并尝试使用select元素更改它
<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
};
}
这个功能不起作用,但是当我在没有功能的情况下设置它时它可以工作。
我也尝试创建更改指令:
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根本不执行。
答案 0 :(得分:19)
在处理标题标记时,您应该使用ng-bind-template,因此在Angular有机会启动之前,您不会看到处于原始状态{{someVar}}
的表达式。您可以添加初始文本标题标签中的标题,它将被您的模板覆盖。
<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>
答案 1 :(得分:4)
使用$ rootScope
.when('/', {
templateUrl: '/templates/page/home.html',
controller: ['$scope','$rootScope', function ($scope,$rootScope) {
$rootScope.title = 'Учитель24.рф';
}]});
答案 2 :(得分:3)
由于@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>
。不知何故, title 标签将无法在演示窗口中正确显示。
的 Demo 强>
答案 3 :(得分:3)
我想出了一个在<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>
答案 4 :(得分:2)
没有额外的代码,一切都应该正常工作:
<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>
就是这样。 Here is a pen.