【发布时间】:2013-01-09 17:53:51
【问题描述】:
我试图弄清楚当我的数据存储在服务中时您如何正确处理绑定。
如果将服务放入 $scope 然后让模板直接绑定到其中,我可以让事情正常工作,但这似乎是一个非常糟糕的主意。
我基本上希望拥有它,以便我的视图/控制器能够轻松更改服务中的状态并将其反映在任何地方。
感觉我应该能够执行以下操作,但它不起作用 (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'];
【问题讨论】:
-
我看到您在哪里观看 $scope.drawing 进行更改,但您没有更改模型,而是更改了所选项目。你不应该为选定的项目更改放置一个处理程序,可能在一个指令中吗?
-
如何使用指令来做到这一点?我认为 ngSelect 指令基本上给了我我需要的行为。我对这个问题的理解是控制器和服务之间的移动才是问题所在——我现在有点困惑:)
-
你是对的,现在我看到了你更新的小提琴,我对你在尝试什么有了更好的了解。你没有困惑:)
标签: javascript service binding angularjs