0

我有这个 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 也在改变控制器 $scope。

有没有什么办法解决这一问题?

4

1 回答 1

2

我不是 100% 确定,但控制器不是单例。这意味着每次您使用 $location.path("something") 更改您的位置时,都会调用一个新的控制器实例。这意味着事先在该控制器中设置的所有范围变量都将丢失。

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

这是我使用的一个例子:

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

    return {
        getUni: function () {
            return uniEdit;
        },
        setUni: function(value) {
            uniEdit = value;
        }
    };
});
于 2015-01-30T12:27:51.203 回答