gpt4 book ai didi

javascript - 处理 AngularJS 服务中的数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 03:40:12 25 4
gpt4 key购买 nike

我正在尝试弄清楚当我的数据存储在服务中时如何正确处理绑定(bind)。

如果将服务放入 $scope 中,然后将模板直接绑定(bind)到其中,我就可以让事情正常运行,但这似乎是一个非常糟糕的主意。

我基本上希望拥有它,以便我的 View / Controller 能够轻松地更改服务中的状态并在各处反射(reflect)出来。

感觉我应该能够执行以下操作,但它不起作用(http://jsfiddle.net/aidankane/AtRVD/1/)。

HTML

<div ng-controller="MyCtl">
<select ng-model="drawing" ng-options="d.file for d in drawings"></select>
</div>
<div ng-controller="MyOtherCtl">
{{ drawing }}
</div>

JS

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

myApp.factory('myService', function(){
var me = {
drawings: [{'file':'a'}, {'file':'b'}]
};
// selected drawing
me.drawing = me.drawings[0];
return me;
});

function MyCtl($scope, myService){
// can do:
// $scope.mys = myService;
// and then in html ng-model="mys.drawing"
// but that seems wrong

$scope.drawings = myService.drawings;
$scope.drawing = myService.drawing;

// can I not do this? it doesn't seem to work anyway...
$scope.$watch('drawing', function(drawing){
myService.drawing = drawing;
});
}

function MyOtherCtl($scope, myService){
$scope.drawing = myService.drawing;
}

MyCtl.$inject = ['$scope', 'myService'];
MyOtherCtl.$inject = ['$scope', 'myService'];

最佳答案

您可以使用 $watch 绑定(bind)到服务并传递函数:

$scope.$watch( function () { return myService.drawing; }, function ( drawing ) {
// handle it here. e.g.:
$scope.drawing = drawing;
});

然后在模板中使用$scope.drawing,它们将自动更新:

<div ng-controller="MyOtherCtl">
{{ drawing }}
</div>

关于javascript - 处理 AngularJS 服务中的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14527377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com