AngularJS使用同一控制器将作用域传递到不同页面

AngularJS使用同一控制器将作用域传递到不同页面,angularjs,Angularjs,我有一个位置页面,可以做一些事情,当最终用户点击一个位置时,它会转到一个新页面。我正试图使用相同的控制器和作用域将一些数据传递到新页面,但在新页面上它会删除作用域吗 HTML: 当我尝试访问新页面上的$scope.model.canvasLocationData返回的[]时?您将离开定义了作用域的页面,当新页面加载时,它不再可用。您有两个选择: 在现有页面上创建新视图,以显示/关于我们/位置内容。这可能是推荐的方法,因为angularjs是单页应用程序(SPA)的框架 您需要一种将状态传递到接

我有一个位置页面,可以做一些事情,当最终用户点击一个位置时,它会转到一个新页面。我正试图使用相同的控制器和作用域将一些数据传递到新页面,但在新页面上它会删除作用域吗

HTML:


当我尝试访问新页面上的
$scope.model.canvasLocationData
返回的
[]
时?

您将离开定义了作用域的页面,当新页面加载时,它不再可用。您有两个选择:

  • 在现有页面上创建新视图,以显示/关于我们/位置内容。这可能是推荐的方法,因为angularjs是单页应用程序(SPA)的框架
  • 您需要一种将状态传递到接收页面(关于我们/位置)的方法,以便可以在那里重建范围。如果您可以从接收页面上的位置id对位置进行重新水化,那么这可能与执行以下操作一样简单(about us/location?id=1234或基于资源的URL:about us/location/1234)。您在这里的选择可能取决于您的中间件技术(.NET、Java、Express等)。进入新页面后,您可以解析URL以获取位置id,从而对信息发出AJAX/XHR/$http请求
这是ui路由器的URL,这对第一个项目符号很有帮助。在不知道您正在使用哪种中间层或技术来服务内容的情况下,推荐第二个选项(新页面)的更直接的方法将更加困难


您将离开已定义范围的页面,当新页面加载时,该范围不再可用。您有两个选择:

  • 在现有页面上创建新视图,以显示/关于我们/位置内容。这可能是推荐的方法,因为angularjs是单页应用程序(SPA)的框架
  • 您需要一种将状态传递到接收页面(关于我们/位置)的方法,以便可以在那里重建范围。如果您可以从接收页面上的位置id对位置进行重新水化,那么这可能与执行以下操作一样简单(about us/location?id=1234或基于资源的URL:about us/location/1234)。您在这里的选择可能取决于您的中间件技术(.NET、Java、Express等)。进入新页面后,您可以解析URL以获取位置id,从而对信息发出AJAX/XHR/$http请求
这是ui路由器的URL,这对第一个项目符号很有帮助。在不知道您正在使用哪种中间层或技术来服务内容的情况下,推荐第二个选项(新页面)的更直接的方法将更加困难


我喜欢这个主意,第二个要点。但是,如何从
/1234
获取ID呢。我们使用ASP.NET作为后端,因此路由是通过C完成的,因此我需要一种方法从控制器内的URL获取此信息。您可以查看一些文档,了解如何为ASP.NET webforms配置自定义路由(我假设您正在使用):如果已经使用MVC,这将更容易,因为我认为脚手架项目将为您设置示例。我喜欢这个想法,第二个要点。但是,如何从
/1234
获取ID呢。我们使用ASP.NET作为后端,因此路由是通过C完成的,因此我需要一种方法从控制器内的URL获取此信息。您可以查看一些文档,了解如何为ASP.NET webforms配置自定义路由(我假设您正在使用):如果已经使用MVC,这将更容易,因为我认为脚手架项目将为您设置示例。
<h3 class="fc-primary" ng-click="canvasLocation(location.id)"><a href="/about-us/location">{{location.id}}</a></h3>
$scope.canvasLocation = function(locationId) {
                    angular.forEach($scope.model.canvasLocations.response.locations,
                        function(value) {
                            if (value.id === locationId ) {
                                $scope.model.canvasLocationData.push(value);
                                var tempArry = [];
                                tempArry.push(value.institutionName);
                                tempArry.push(value.latitude);
                                tempArry.push(value.longitude);
                                tempArry.push(value.mondayOpen);
                                tempArry.push(value.mondayClose);
                                tempArry.push(value.tuesdayOpen);
                                tempArry.push(value.tuesdayClose);
                                tempArry.push(value.wednesdayOpen);
                                tempArry.push(value.wednesdayClose);
                                tempArry.push(value.thursdayOpen);
                                tempArry.push(value.thursdayClose);
                                tempArry.push(value.fridayOpen);
                                tempArry.push(value.fridayClose);
                                tempArry.push(value.saturdayOpen);
                                tempArry.push(value.saturdayClose);
                                tempArry.push(value.sundayOpen);
                                tempArry.push(value.sundayClose);
                            }
                        });
                };