2013-08-09 30 views
8

kullanarak başlık elemanı verileri bağlamak ve ben <title>{{title}}</title> kurmak ve bennasıl angularjs öğreniyorum angularjs

<select ng-model="user.title"> 
    <option value="Lorem">Lorem</option> 
    <option value="Ipsum">Ipsum</option> 
    <option value="Dolor">Dolor</option> 
</select> 
Ben ng-change deneyin

ve ng-selectset()

ile seçme elemanı kullanarak bu değiştirmeye çalışan
function ctrl($scope) { 
    $scope.title = 'hello'; // this set the title 
    $scope.set = function() { 
     $scope.title = $scope.user.title; // this not 
    }; 
} 

işlevi çalışmaz, ama sadece bir fonksiyonu olmadan ayarladığınızda o iş.

app.directive('change', function() { 
    console.log('change'); 
    return { 
     link: function(scope, element, attrs) { 
      console.log(arguments); 
      element[0].onChange = function() { 
       scope[attrs[0]](); 
      }; 
     } 
    }; 
}); 

ama bu çok çalışmaz:

Ben de değişiklik yönergesi oluşturmayı deneyin. Console.log hiç çalışmıyor.

<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> 

Ve hepsi bu:

+1

Bu web sitesi yerine {{uygulama olarak görünen daha doğru bir varsayılan arama sonuçlarında düzgün ve ekran dizine alınmasını sağlayacak Kontrol dışarı csharp tepkisini http://stackoverflow.com/a/24921980/243034 .başlık}} (veya ne seçerseniz seçin.) – Calebj

cevap

2

Her şey ekstra kod olmadan sorunsuz çalışır. @madhead size müthiş bir cevap verdi beri Here is a pen.

+0

Hayır, bu bir kod ilkesidir. Kalem iframe'e yüklendiğinde gerçek başlığı göstermez (ve başlığa ilk çocuk olarak eklenir). Dev araçlarla çalışın ve değiştiğini görün, ya da kendi örneğindeki örneği deneyin. (Hızlı testler için yeoman'ı açısal jeneratörü kullanıyorum). – madhead

3

, sadece senin kod neden çalışmıyor ilgili sorunuza biraz ışık tutmak istiyoruz. Kesinlikle ng-change kullanabilirsiniz

, bu kodu bir göz atın lütfen. Kişisel yaklaşım çok yakın olduğunu ve belki bir şeyler cevapsız tahmin?

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

Bir şeyi işaret etmek istiyorum. Eğer jsfiddle içinde test ederseniz yerine <div>{{title}}</div> kullanın <title>{{title}}</title> kullanmayın. Her nasılsa başlık etiketi demo penceresinde doğru göstermez.

Demo

+0

Tam olarak aynı şey var ama html nesnesine ng-app ve ng-controller ayarlıyorum. Eğer '$ scope.title' öğesini başarım değiştiricisinde ayarlıyorum, ancak bir fonksiyona koyarsam değil. – jcubic

+0

'ng-app'' 'de ayarlanabilir, 'ng-controller'' ' ile devam etmeli, lütfen deneyin. – zsong

+0

Hem jsFiddle hem de Codepen yükü iframe'lerle sonuçlanır, bu nedenle "" bölümü bu awesom'larla doğru şekilde test edilemez. – madhead

4

Kullanım $ rootScope

.when('/', { 
    templateUrl: '/templates/page/home.html', 
    controller: ['$scope','$rootScope', function ($scope,$rootScope) { 
     $rootScope.title = 'Учитель24.рф'; 
}]}); 
3

ben <title> etiketinde başlığını ayarlamak için bir çözüm buldum.

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>

17

yüzden de ifadesini görmüyorum Eğer ng-bind-template kullanmalıdır başlık etiketi ile uğraşan onun ham durumu {{someVar}} daha önce Angular'ın içeri girme şansı vardır. Başlığın ilk metnini başlık etiketine ekleyebilir ve şablonunuz tarafından üzerine yazılır.

<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

Ayrıca çalışmak için 'head' elemanına '' özniteliğini eklemeliydim. – PyreneesJim