Angularjs 打开具有不同数据的同一控制器的多个实例

Angularjs 打开具有不同数据的同一控制器的多个实例,angularjs,singleton,angular-ui-router,angular-controller,Angularjs,Singleton,Angular Ui Router,Angular Controller,我有一个angular应用程序,允许用户在模式窗口中打开产品的详细信息。模态具有相应的url(/product/:id)。该应用程序的一个要求是,用户应该能够在彼此的顶部打开这种状态的多个模态-对于他们正在观看的不同产品。例如:/product/1、/product/2。。。以下是路由的代码: $stateProvider.state('product', { url: '/product/:id', onEnter: ["$modal", function ($modal) { $mod

我有一个angular应用程序,允许用户在模式窗口中打开产品的详细信息。模态具有相应的url(/product/:id)。该应用程序的一个要求是,用户应该能够在彼此的顶部打开这种状态的多个模态-对于他们正在观看的不同产品。例如:/product/1、/product/2。。。以下是路由的代码:

$stateProvider.state('product', {
url: '/product/:id',
onEnter: ["$modal", function ($modal) {
   $modal.open({
      templateUrl: '/App/product/product.html',
      controller: 'ProductController',
      controllerAs: 'vm'
   });
}]             
}))

问题是,当我打开一个产品的新模式时,所有以前打开的该状态的其他模式都会使用最新产品的数据重新运行它们的ProductController。
如何并行运行一个控制器的不同实例,每个实例都包含为其打开的产品的数据?

您可以传递一个解析对象,该对象将从当前作用域中注入所需的数据:

$stateProvider.state('product', {
url: '/product/:id',
onEnter: ["$modal", function ($modal) {
   $modal.open({
      templateUrl: '/App/product/product.html',
      controller: 'ProductController',
      controllerAs: 'vm',
      resolve: {
                            product: function () {
                                $scope.current_roduct= $scope.selected;
                                return $scope.current_roduct;
                            }
                        }
   });
}]             
});

您可以传递一个resolve对象,该对象将从当前作用域中注入所需的数据:

$stateProvider.state('product', {
url: '/product/:id',
onEnter: ["$modal", function ($modal) {
   $modal.open({
      templateUrl: '/App/product/product.html',
      controller: 'ProductController',
      controllerAs: 'vm',
      resolve: {
                            product: function () {
                                $scope.current_roduct= $scope.selected;
                                return $scope.current_roduct;
                            }
                        }
   });
}]             
});