使用服务的控制器之间的角度共享数据

我正在使用服务在控制器之间共享数据。 在第一个控制器中,我调用这样的函数:

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

链接地址: http://www.djcxy.com/p/77901.html

上一篇: Angular sharing data between controllers using service

下一篇: Angular JS factory vs service vs provider by example