SORU
10 Temmuz 2012, Salı


AngularJS kullanarak ng vardır zaman kaybetme kapsamı

Bu modül yolları var:

var mainModule = angular.module('lpConnect', []).
    config(['$routeProvider', function ($routeProvider) {
    $routeProvider.
        when('/home', {template:'views/home.html', controller:HomeCtrl}).
        when('/admin', {template:'views/admin.html', controller:AdminCtrl}).
        otherwise({redirectTo:'/connect'});
}]);

Eve html:

<div ng-include src="views.partial1"></div>

partial1 html:

<form ng-submit="addLine()">
    <input type="text" ng-model="lineText" size="30" placeholder="Type your message here">
</form>

HomeCtrl:

function HomeCtrl($scope, $location, $window, $http, Common) {
    ...
    $scope.views = {
        partial1:"views/partial1.html"
    };

    $scope.addLine = function () {
        $scope.chat.addLine($scope.lineText);
        $scope.lines.push({text:$scope.lineText});
        $scope.lineText = "";
    };
...
}

kapsam addLine fonksiyonu$.lineText tanımlanmamış, bu ekleyerek çözülebilirng-kontrol="" . HomeCtrl için partial1.html ancak denetleyici iki kez aradı neden olur, burada neyi kaçırıyorum?

CEVAP
3 Ocak 2013, PERŞEMBE


@Renan belirtildiği gibi, yeni bir alt kapsam oluşturur ng vardır. Bu prototypically miras (altında kesik çizgiler) HomeCtrl kapsam kapsam. ng-model="lineText" aslında alt kapsamı üzerinde ilkel kapsam özellik, HomeCtrl kapsam oluşturur. Bu çocuk kapsam HomeCtrl kapsam/: üst tarafında yer almaktadır

ng-include scope

Kullanıcı HomeCtrl yazdığınız şeyi saklamak için $scope.çizgiler dizisi, addLine işlevi değere öneriyorum

 <form ng-submit="addLine(lineText)">

LineText bu ngİnclude ait olduğundan ayrıca, kapsam kısmi, temizlemeden sorumlu olması gerektiğini düşünüyorum:

 <form ng-submit="addLine(lineText); lineText=''">

Fonksiyon addLine() böylece duruma

$scope.addLine = function(lineText) {
    $scope.chat.addLine(lineText);
    $scope.lines.push({
        text: lineText
    });
};

Fiddle.

Alternatifler:

  • HomeCtrl üzerinde bir nesne özelliği $tanımlamak kapsam ve kısmi kullan: ng-model="someObj.lineText; fiddle
  • tavsiye değil, bu bir hack daha vardır: kısmi/erişim kapsam HomeCtrl $lineText bir özellik oluşturmak için $üst: ng-model="$parent.lineText"; fiddle

Tam burada bunu açıkladı ama biraz yukarıdaki iki alternatif iş açıklamak dahil,: What are the nuances of scope prototypal / prototypical inheritance in AngularJS?

AddLine this kullanarak tavsiye etmem() işlevi. Kapsam erişilen/manipüle ediliyor çok daha az açık hale gelir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • Glyn Dewis

    Glyn Dewis

    25 AĞUSTOS 2007
  • UKF

    UKF

    2 Aralık 2009