$ location.path正在改变Controller的范围

时间:2015-01-30 12:14:57

标签: angularjs ng-dialog

我有这个ngDialog模式:

$scope.showMessage = function(size, status, data) {
    // open modal page
    ngDialog.open({
        scope: $scope,
        template: 'orderResponse.html',
        controller: $controller('OrderResponseModalController', {
            $scope: $scope,
            responseStatus: status,
            responseData: data
        }),
        className: 'createGroup',
        closeByDocument: false,
        closeByEscape: false
    });
};

因此,基本上,它将打开一个OrderResponseModalController将负责的模态,并向该控制器发送三个值。

此控制器内有此代码:

$scope.message = responseData.message;
$scope.title = responseData.title;
...
$location.path("purchases");

orderResponse.html看起来像这样:

<p>{{ message }}</p>
<h1>{{ title }}</h1>

但是,这些变量的值未显示在浏览器中(仅{{message}})。我认为这是因为$ location.path也在改变Controller $ scope。

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

我不是百分百肯定,但控制者不是单身人士。这意味着每次使用$ location.path(&#34;某些&#34;)更改位置时,都会调用控制器的新实例。这意味着预先在该控制器中设置的所有范围变量都将丢失。

为了在控制器实例之间共享变量,您应该使用服务,因为服务是单例。

以下是我使用的示例:

angular.module('angularApp')
.service('sharedProperties', function () {
    var uniEdit = 0;

    return {
        getUni: function () {
            return uniEdit;
        },
        setUni: function(value) {
            uniEdit = value;
        }
    };
});