0

これが私の単純なコントローラーとディレクティブです:

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

function MyCtrl($scope, $q) {
    var myObject = {
        name: "Dingus",
        favoriteFood: "Chicken",
    };

    var itemDeferred = $q.defer();
    $scope.item = itemDeferred.promise;

    var resolveIt = function() {
        itemDeferred.resolve(myObject);
    };
    resolveIt();
}

myApp.directive('promised', function() {
    return {
        restrict: 'E',
        scope: { boundModel: '=' },
        template: '<input type="text" ng-model="boundModel">',
    };
});

スコープアイテムはプロミスから解決されます。HTMLで使用する場合ng-model、入力によってアイテムが更新されないのはなぜですか。また、ディレクティブで入力できないのはなぜですか。

実用的な例については、このフィドルを参照してください:http: //jsfiddle.net/winduptoy/XmBxK/

4

1 に答える 1

3

入力ボックスに入力するたびに、Angularのダイジェストループがpromiseの結果を調べ、myObjectを$scope.itemに再割り当てすることが起こっていると思います。これを回避する1つの方法は次のとおりです。

//$scope.item = itemDeferred.promise;
var promise = itemDeferred.promise;

promise.then(function(obj) {
   alert('Success: ' + obj);
   $scope.item = obj;
}, function(reason) {
   alert('Failed: ' + reason);
});

フィドル

于 2013-01-19T05:09:37.170 に答える