ui-sref被禁止访问控制器数据或视图。
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
问题: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阻止访问控制器数据或视图的问题。如果您想了解更多详细信息,可以在这里查看我们的工作示例。感谢您的阅读,希望对您有所帮助!
在这段代码中,问题出现在使用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是否符合预期。