【问题标题】:AngularJS. Initialize controller with different data角JS。用不同的数据初始化控制器
【发布时间】:2014-07-18 10:20:44
【问题描述】:

我在我的 Angular 应用程序中使用 $routeProvider 进行路由。对于 2 条路线,我使用相同的 HTML 模板和相同的控制器。

        when('/products, {
            templateUrl: 'views/products.html',
            controller: 'ProductListCtrl'
        }).
        when('/myProducts', {
            templateUrl: 'views/products.html',
            controller: 'ProductListCtrl'
        }).

只有我想显示的数据差异。 IE。对于路径products,我希望AJAX 请求发送到myserver:8080/products,对于路径myProducts,我想将AJAX 请求中的数据加载到myserver:8080/products/my

现在我使用$location 服务来区分当前页面(productsmyProducts)并加载适当的数据。

有更优雅的方法吗?比如使用$routeProviderresolve方法?

【问题讨论】:

    标签: javascript ajax angularjs


    【解决方案1】:

    在今天的场景中重用控制器名称的最佳方法是使用带有 $routeparams 的解析。

    你可以修改你的代码如下

     when('/products, {
                    templateUrl: 'views/products.html',
                    controller: 'ProductListCtrl',
        resolve: {
                product: function($http) {
                  return $http.get('/products')
                },
                  needToShowFilter:function($q){
                   var showfilter = $q.defer();
                       showfilter.resolve(false);
                   return showfilter.promise
                }
              }
                }).
                when('/myProducts', {
                    templateUrl: 'views/products.html',
                    controller: 'ProductListCtrl',
        resolve: {
                product: function($http) {
                  return $http.get('/products/my')
                },
                needToShowFilter:function($q){
                   var showfilter = $q.defer();
                       showfilter.resolve(true);
                   return showfilter.promise
                }
              }
                }).
    

    然后在您的控制器中,您可以将产品注入到控制器代码中。

    【讨论】:

    • 谢谢。但是我也可以注入更多变量吗?例如我还想要变量needToShowFilter,如果它是products,那么这个变量应该是true othervise false
    • 您可以像我在上面创建的那样在路由中创建额外的解析属性,然后您可以将其注入控制器中
    【解决方案2】:

    尝试在控制器中添加 $route 并记录

    $route.current
    

    看看你里面有什么,我认为这是获取信息的方式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多