使用服务的控制器之间的角度共享数据
我正在使用服务在控制器之间共享数据。 在第一个控制器中,我调用这样的函数:
muscleGroupService.setState(true);
以下是服务中功能的代码:
var state;
function setState(x) {
state = x;
}
x成为真,但由于某种原因,状态不会变为真,它保持不确定状态。
我怎样才能解决这个问题 ?
编辑
我相信我已经设法找到问题所在,但我不知道如何解决问题。
在Index.html中我有这行代码:
<div class="modal fade" ng-include src="'/Content/Templates/Modals/Admin/ModalMuscleGroup.html'" id="addModal"> </div>
而且一旦我进入页面ng-include包含ModalMuscleGroup.html和控制器模式窗口。
当我做水手时,我是模态控制器。 喜欢这个:
muscleGroupService.isItemBeingUpdated()
它不返回变量状态,因此返回undefined。
我相信这可以使用$ rootScope和$ rootScope。$ broadcast和$ rootScope。$ on进行修复。 有没有其他的方式没有使用$ rootScope?
编辑2
这是代码:
Ctrl1的一部分(应将数据发送到服务):
$scope.updateItem = function (item) {
muscleGroupService.setState(true);
muscleGroupService.setItemForUpdate(item);
};
Relevat部分服务:
app.angularModule.service('muscleGroupService', function(breeze, logger) {
breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true);
var serviceName = "/breeze/MuscleGroup";
var manager = new breeze.EntityManager(serviceName);
manager.enableSaveQueuing(true);
var removeItem = breeze.core.arrayRemoveItem;
var items = [];
var state;
var itemBeingUpdated;
return {
setState: function(x) {
state = x;
},
isItemBeingUpdated : function() {
return state;
},
setItemForUpdate : function(item) {
itemBeingUpdated = item;
},
getItemBeingUpdated : function() {
return itemBeingUpdated;
},
updateItem : function() {
if (itemBeingUpdated.entityAspect.entityState.isModified()) {
saveChanges();
}
},
这里是模态ctrl:
app.angularModule.controller('AdminMuscleGroupModalCtrl', function ($scope, breeze, muscleGroupService) {
$scope.init = function () {
if (muscleGroupService.isItemBeingUpdated() == true) {
$scope.itemBeingUpdated = muscleGroupService.getItemBeingUpdated();
$scope.NewName = itemBeingUpdated.Name;
$scope.NewDesc = itemBeingUpdated.Description;
}
};
$scope.init();
});
这里是Ctrl1的html的一部分:
<tbody>
<tr data-ng-repeat="item in items">
<td>{{item.Name}}
</td>
<td>{{item.Description}}
</td>
<td> <button class="btn btn-primary" data-ng-click="updateItem(item)" data-toggle="modal" href="#addModal"><i class="glyphicon glyphicon-pencil"></i> Edit</button>
</tr>
</tbody>
<div class="modal fade" ng-include src="'/Content/Templates/Modals/Admin/ModalMuscleGroup.html'" id="addModal"> </div>
和模态html:
<div class="modal-body">
<form class="form-horizontal">
<div class="form-group">
<label for="inputName" class="col-lg-2 control-label">Name</label>
<div class="col-lg-10">
<input type="text" class="form-control" data-ng-model="NewName" id="inputName" placeholder="Name">
</div>
</div>
<div class="form-group">
<label for="inputDesc" class="col-lg-2 control-label">Description</label>
<div class="col-lg-10">
<input type="text" class="form-control" data-ng-model="NewDesc" id="inputDesc" placeholder="Description">
</div>
</div>
</form>
</div>
尝试定义你的功能如下:
myApp.factory('myService', function(){
var state;
return {
setState:function(x){
state = x;
}
}
});
尝试
this.state = null;
that = this;
function setState(x) {
that.state = x;
}
你有没有尝试this.state = x
?