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">',
    };
});

范围项是从一个承诺中解决的。当我ng-model在 HTML 中使用时,为什么输入不更新项目,为什么指令甚至不让我输入?

请参阅此小提琴以获取工作示例:http: //jsfiddle.net/winduptoy/XmBxK/

4

1 回答 1

3

我认为发生的情况是,每次您在输入框中输入内容时,Angular 的摘要循环都会检查 promise 的结果并将 myObject 重新分配给 $scope.item。这是避免这种情况的一种方法:

//$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 回答