Tôi đang cố gắng tìm ra cách bạn xử lý ràng buộc đúng cách khi dữ liệu của tôi được lưu trữ trong một dịch vụ.Xử lý ràng buộc dữ liệu trong AngularJS Services
Tôi có thể làm mọi thứ hoạt động nếu nó đưa dịch vụ vào phạm vi $ và sau đó lấy các mẫu để liên kết trực tiếp với nó nhưng điều đó có vẻ như là một ý tưởng tồi.
Về cơ bản tôi muốn có nó để chế độ xem/bộ điều khiển của tôi có thể dễ dàng thay đổi trạng thái trong dịch vụ và phản ánh ở mọi nơi.
Có vẻ như tôi có thể làm một việc như sau, nhưng nó không hoạt động (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'];
Tôi thấy nơi bạn đang xem $ scope.drawing để thay đổi, nhưng bạn không thay đổi mô hình, bạn sẽ thay đổi mục đã chọn. Bạn không nên đặt trong một xử lý cho sự thay đổi mục đã chọn, có thể trong một chỉ thị? –
Tôi sẽ làm điều này bằng cách sử dụng các chỉ thị như thế nào? Tôi đã tìm ra lệnh ngSelect về cơ bản mang lại cho tôi hành vi mà tôi cần. Sự hiểu biết của tôi về vấn đề này là sự chuyển động giữa bộ điều khiển và dịch vụ đó là vấn đề - sau đó tôi lại hơi bối rối ngay bây giờ :) –
Bạn nói đúng, bây giờ tôi thấy câu chuyện được cập nhật của bạn, tôi có một ý tưởng hay hơn về những gì bạn đang cố gắng. Bạn không bị nhầm lẫn :) –