ui-sref被禁止访问控制器数据或视图。

15 浏览
0 Comments

ui-sref被禁止访问控制器数据或视图。

我在获取我的状态参数控制器方面遇到了一些困难。我正在使用正确的状态链接到下一个视图。

查看订单

在我的配置文件中,我引用了该名称和路由参数的状态。我暂时注释掉了resolve对象。我的目标是进入控制器然后传递正确的数据。注意我正在使用controllerAs。

我的初始想法是({customerId: ctrl.cust.id }),但是这并没有改变URL路由。

URL正在更改以匹配URL名称,但没有连接到控制器并没有显示视图。

(function() {
    'use strict';
    angular
        .module('app.orders')
        .config(config);
    function config($stateProvider) {
        $stateProvider
            .state('orders',{
                // params: {customerid: null},
                url:'/customers:customerId', 
                templateUrl: './components/orders/orders.html',
                controller: 'OrdersController',
                controllerAs: 'ctrl',
                resolve: {
                customerFactory: 'customerFactory',
                customerInfo: function( customerFactory, $stateParams) {
                return customerFactory.getCustomers($stateParams.id);
            }
        }

**************我的主要问题是resolve。这阻止了我进入下一个控制器。*****************

                resolve: {
                    customerId:[ '$stateParams','customerFactory', function( $stateParams, customerFactory) {
                         return customerFactory.getCustomers($stateParams.id);
                     }]
                 }
        })
    };
})();

目前我的控制器非常简单。我只是想连接到它。我已经检查了我的网络选项卡,并且看到了文件的GET。

  (function() {
// 'use strict';
angular
    .module('app.orders')
    .controller('OrdersController', OrdersController);
function OrdersController($stateParams) {
    console.log('in');
        var vm = this;
        vm.title = "Customer Orders";
        vm.customer = null;
}
}());

我已经在主javascript文件中引用了我的模块。

   (function () {
'use strict';
angular.module('app', ['app.services',
    'app.customers',
    'app.orders','ui.router']);
})();

当我注释掉resolve时,我可以访问控制器。所以我知道问题在resolve中。这是我的服务。

我正在使用$http请求向Json文件发出请求,并使用.then。

更新 这是我重构后的服务调用,每次在控制台中都能正确返回客户端。

  (function() {
angular
    .module('app.services',[])
    .constant('_', window._)
    .factory('customersFactory', customersFactory);
function customersFactory($http, $log) {
    return {
        getCustomers: getCustomers,
        getCustomer: getCustomer
    };
    function getCustomers(){
        return $http.get('./Services/customers.json',{catch: true})
            .then(getCustomerListComplete)
            .catch(getCustomerListFailed);
            function getCustomerListComplete(response) {
                console.log('response.data',response.data);
                return response.data;
            }
            function getCustomerListFailed(error) {
                console.log('error', error);
            }
    }
    function getCustomer(id) {
        var url = './Services/customers.json';
        return $http.get(url, {
            catch: true
        })
        .then(function(response) {
            console.log('promise id',id);
            var data = response.data;
            for(var i =0, len=data.length;i

0
0 Comments

问题:ui-sref阻止访问控制器数据或视图的原因以及解决方法

在这个问题中,我们遇到了一个关于ui-sref阻止访问控制器数据或视图的问题。最终,我们通过做出以下几个调整来解决这个问题。

首先,我们观察到在定义"customerFactory"时有一个拼写错误。在代码中,我们将"customerFactory"写成了"customerFactory"(多了一个"s")。这个错误导致了ui-sref无法访问下一个控制器。修复这个错误的方法是将"customerFactory"改为"customerFactory"(去掉"s")。

其次,我们对状态进行了调整。我们将状态定义更改为以下内容:

$stateProvider
    .state('orders',{
        url:'/customers{customerId:int}',
        templateUrl: './components/orders/orders.html',
        controller: 'OrdersController',
        controllerAs: 'ctrl',
        resolve: {
          customer:[ '$stateParams','customersFactory', 
            function( $stateParams, customersFactory) {
              return customersFactory
                .getCustomer($stateParams.customerId);
            }]
          }
})

在这个调整后的状态定义中,我们通过使用"customer"替代了"customerId"来解决了名称错误的问题。并且我们还对工厂进行了调整,添加了一个新的方法"getCustomer",该方法用于获取特定id的顾客信息。

return {
    getCustomers: getCustomers,
    getCustomer: getCustomer
};

最后,我们还需要在控制器中对代码进行一些调整。在控制器中,我们将"$stateParams.customerId"改为"$stateParams.customerId",以正确引用顾客信息。

通过以上调整,我们成功解决了ui-sref阻止访问控制器数据或视图的问题。如果您想了解更多详细信息,可以在这里查看我们的工作示例。感谢您的阅读,希望对您有所帮助!

0
0 Comments

在这段代码中,问题出现在使用ui-sref时,无法访问控制器数据或视图。这个问题的原因是在配置文件中的state状态中,使用了绝对路径的路由。解决方法是去掉绝对路径的路由,或者在使用ui-sref时,检查生成的html是否符合预期。

具体来说,在这段代码中,我们看到了一个使用ui-sref的例子。在这个例子中,ng-repeat指令用于循环遍历一个对象数组,并使用ui-sref指令创建了一个链接,链接到名为orders的状态,并传递了一个customerId参数。

然而,在这个例子中,并没有明显的错误。根据代码中的注释,这段代码似乎是完全有效的。因此,很难猜测出问题所在。在stackoverflow上的一个回答中提到,这段代码似乎是完全有效的。

在这个例子中,我们还看到了一个名为app.orders.js的文件,其中包含了一个名为OrdersController的控制器和一个名为orders.html的模板。控制器的作用是将customerId添加到title中,并将title绑定到模板中的一个pre标签中。

然后,我们看到了一个使用ui-sref的例子,其中传递了一个customerId参数。这个例子中的ui-sref指令会生成一个链接,链接到名为orders的状态,并将customerId参数传递给该状态。

最后,在这段代码的最后,有一个注释提到了可能存在的问题:使用了绝对路径的路由。这可能是导致问题的原因。解决这个问题的方法是去掉绝对路径的路由,或者检查生成的html是否符合预期。

总结起来,这段代码中出现了一个问题:使用ui-sref时无法访问控制器数据或视图。这个问题的原因可能是使用了绝对路径的路由。解决这个问题的方法是去掉绝对路径的路由,或者检查生成的html是否符合预期。

0