你如何处理观点和手表的承诺 - AngularJs 1.4

时间:2015-08-05 08:27:28

标签: javascript angularjs angularjs-scope

我采用了实现所有属性和方法的方法作为返回承诺,我认为这是“有角度”的方式。

我还沿着从所有控制器和指令移除$ scope的路线,并使用controllerAsbindToController方法。

1。手表。
在我通过做这样的事情来看变量之前

var $removeWatch = $scope.$watch(function() {
    return _myService.myProperty(); 
}, function(newValue, oldValue) {

});

我服务中的财产非常基本,就像这样

this.myProperty = function() {
    return "myValue";
}

现在我已将我的属性更改为使用promises,所以现在它看起来像是

this.myProperty = function() {
    var $defer = $q.defer();
    $defer.resolve("myValue");
    return $defer.promise;
}

但是现在我的手表没有用?我怎样才能让我的手表上班?由于我已经删除了各地的范围,我如何观察变量/属性/方法?

2。物业视图 在我的html页面中,我会有类似的内容

<span ng-bind="::getName()"></span>

我的控制器上会有一个类似于此的方法。

$scope.getName = function() {
    return _myService.myProperty();
};

现在我已经删除了范围并将我的属性更改为返回promise(上面的服务示例中的相同属性),这不再有效。

如何从使用promises的属性/方法将数据返回到我的视图?

1 个答案:

答案 0 :(得分:0)

我可能在这里遗漏了一些东西,但这是我从你遇到的问题中理解的:

如果你正在处理这样的承诺:

var ctrl = this; // controller

somePromise().then(function(data) {
  ctrl.someProperty = data;
})

然后您应该能够观察ctrl.property更改:

$scope.$watch(ctrl.someProperty, function (newVal, oldVal) {
  console.log(newVal, oldVal);
})

您的观点应该能够毫无问题地显示ctrl.someProperty数据。

当然,之前建议的掠夺者对于更详细的解决方案非常有帮助。

希望这有帮助。