Angular ui-sref在下拉菜单上不起作用。
Angular UI-Sref在下拉菜单中不起作用的原因可能是由于ng-options指令的使用方式不正确。解决这个问题的方法是考虑使用ng-options代替ui-sref。
在上面的代码中,我们可以看到MainController控制器中定义了一个$scope.options数组,其中包含了四个选项。然后,通过ng-options指令将这些选项绑定到了下拉菜单中。ng-options的语法是"opt.value as opt.label for opt in options",它的作用是将$scope.options数组中的每个元素的value属性作为选项的值,将label属性作为选项的显示文本。
另外,我们还可以看到在$scope.$watch函数中,当$scope.tt的值发生变化时,会调用$state.go方法进行页面跳转。这里的$scope.tt是通过ng-model指令与下拉菜单进行了绑定。
除了上述的解决方法之外,还可以考虑使用ng-change指令来检测下拉菜单的变化。ng-change指令的作用是在下拉菜单的值发生变化时触发一个函数。根据以上代码的修改,我们可以在下拉菜单中添加ng-change="changeState()",然后在MainController中定义一个changeState函数来处理页面跳转的逻辑。
通过正确使用ng-options指令和ng-change指令,我们可以解决Angular UI-Sref在下拉菜单中不起作用的问题。
问题的原因是在select - option标签内无法使用a标签。解决方法是编写一个函数,在select的改变或者模型改变时触发该函数,可以尝试使用ng-change指令。具体代码如下:
控制器代码如下:
angular.module('myApp') .controller('myController', ['$scope', '$state', function ($scope, $state){ $scope.locationChangeFunction = function(){ $state.go($scope.tt); } }]);
如果想要兼顾两种解决方法,可以使用以下代码:
通过ng-change指令等待模型的改变,改变DOM,从而触发改变。这样就不需要运行一个消耗资源的$watch函数。使用Hieu TB的方法可能更可靠,但需要尝试。我更喜欢使用事件来进行改变,因为$watch函数会一直运行,而事件(如ng-change)只在需要时运行函数。然而,我不知道ng-change是否在模型改变之前或之后触发,即使它触发了,可能会有竞态条件,但使用$watch函数可以确保模型已经改变。我仍然建议尽量使用事件而不是$watch函数,因为如果由于其他原因改变了模型,你又要再次改变页面。
感谢_T指出这一点。我认为"ng-change"是最好的解决方法,因为我也急于回答问题而忘记了这一点。我已经为你的答案点了赞,:)