2012-08-01 29 views
15

AngularJS kullanarak bir veri özniteliğine nasıl enterpolasyonlu bir değer bağlayacağını bilen var mı?AngularJS veri özniteliğine değeri bağlama

<input type="text" data-custom-id="{{ record.id }}" /> 

Açısal, öğenin yapısı dışında olduğu için bu değeri enterpolasyona benzemiyor. Herhangi bir fikrin nasıl düzeltileceği

+0

Jsfiddle örneği verebilir misiniz? –

cevap

6

Sonuçta sorun yok gibi görünüyor. Şablon ayrıştırıldı ve denetleyicim verileri indiriyordu, ancak şablon ayrıştırıldığında veriler henüz yoktu. Ve koyduğum yönerge, o sırada, o sırada, boş makro verilerinin toplanması için gerekli olan veriye ihtiyaç duyuyor.

bu $ izle komutuyla oldu çözüldü yol: Sonra

$scope.$watch('ready', function() { 
    if($scope.ready == true) { 
    //now the data-id attribute works 
    } 
}); 

kontrolör sonra tüm ajax şeyler yüklendikten Bunu yapın:

$scope.ready = true; 
+0

Sorguda bahsettiğiniz record.id ile ilgili selectOptions nasıldır? – Hengjie

+0

Daha alakalı olması için kodu güncelledim. – matsko

1

O kadar benziyor

// for the purpose of this example let's assume that variables '$q' and 'scope' are 
// available in the current lexical scope (they could have been injected or passed in). 

function asyncGreet(name) { 
    var deferred = $q.defer(); 

    setTimeout(function() { 
    // since this fn executes async in a future turn of the event loop, we need to wrap 
    // our code into an $apply call so that the model changes are properly observed. 
    scope.$apply(function() { 
     if (okToGreet(name)) { 
     deferred.resolve('Hello, ' + name + '!'); 
     } else { 
     deferred.reject('Greeting ' + name + ' is not allowed.'); 
     } 
    }); 
    }, 1000); 

    return deferred.promise; 
} 

var promise = asyncGreet('Robin Hood'); 
promise.then(function(greeting) { 
    alert('Success: ' + greeting); 
}, function(reason) { 
    alert('Failed: ' + reason); 
); 

Düzenleme:: beni ne gerçekten peşinde bir Promise/Deferred sağ, burada basit bir sınav var Bir Denetleyici ile bir Promise kullanarak ve bağlama ple:

var app = angular.module('myApp', []); 

app.controller('MyCtrl', function($scope, $q) { 
    var deferredGreeting = $q.defer(); 
    $scope.greeting = deferredGreeting.promise; 

    /** 
    * immediately resolves the greeting promise 
    */ 
    $scope.greet = function() { 
     deferredGreeting.resolve('Hello, welcome to the future!'); 
    }; 

    /** 
    * resolves the greeting promise with a new promise that will be fulfilled in 1 second 
    */ 
    $scope.greetInTheFuture = function() { 
     var d = $q.defer(); 
     deferredGreeting.resolve(d.promise); 

     setTimeout(function() { 
      $scope.$apply(function() { 
       d.resolve('Hi! (delayed)'); 
      }); 
     }, 1000); 
    }; 
});​ 

Çalışma JSFiddle: http://jsfiddle.net/dain/QjnML/4/

Temelde fikir sözünü bağlayabilir ve zaman uyumsuz yanıtın giderir kez yerine getirilmesi olacaktır.

+0

Bu harika. Ancak, sorumu daha iyi bir şekilde anlatan bir örnek verebilir misiniz? Bunu anlamak için zor bir zaman geçiriyorum. Teşekkür ederim :) – matsko

+0

Temel olarak düz bir şekilde docs ... ona soruyla ilgili bir şey vermek güzel olurdu. – Nix