Javascript 如果在$stateProvider中指定控制器,Angular ui路由器将在加载时运行控制器两次

Javascript 如果在$stateProvider中指定控制器,Angular ui路由器将在加载时运行控制器两次,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我看到控制器中的代码运行了两次,从而显示在chrome dev tools中的console.log windows输出中 questions.html <div ng-controller="questionController as vm"> </div> app.js app.config([ '$stateProvider', '$urlRouterProvider', '$locationProvider', function

我看到控制器中的代码运行了两次,从而显示在chrome dev tools中的console.log windows输出中

questions.html

<div ng-controller="questionController as vm"> </div>
app.js

app.config([
    '$stateProvider',
    '$urlRouterProvider',
    '$locationProvider',
    function ($stateProvider, $urlRouterProvider, $locationProvider) {

        var viewBase = '/apps/src/views/';

        $urlRouterProvider.otherwise("/");

        $locationProvider.hashPrefix(''); // get rid of ! was getting #! 

        $stateProvider
            .state('questions',
            {
                url: "/questions",
                templateUrl: viewBase + "questions.html"//,
                //controller: "questionController"
                //views: {
                //
                //}
            });


    }]
);
注意,我注释掉了路由中的
控制器:“questionController”
,否则它会运行两次

我知道我去年用的是ui路由器,我总是用控制器:没有任何问题

可能是一些新的版本组合导致了一个bug

基于我尝试过的答案,但没有显示数据

app.config([
    '$stateProvider',
    '$urlRouterProvider',
    '$locationProvider',
    function ($stateProvider, $urlRouterProvider, $locationProvider) {

        var viewBase = '/apps/src/views/';

        $urlRouterProvider.otherwise("/");

        $locationProvider.hashPrefix(''); // get rid of ! was getting #! 

        $stateProvider
            .state('questions',
            {
                url: "/questions",
                templateUrl: viewBase + "questions.html"//,
                //controller: "questionController"
                //views: {
                //
                //}
            });


    }]
);
我正在使用
ui网格

 <!--<div ng-controller="questionController as vm">-->

       <div ui-grid="{ data: vm }" class="grid"></div>

  <!--</div>-->
console.log确实可以输出数据

固定的

看来我不得不这么做

路线

然后


这是因为您通过执行以下操作将控制器和模板本身包括在
$stateProvider

<div ng-controller="questionController as vm"></div>


您可以从HTML中删除
ng控制器
,这是预期的行为。您不应该在视图中定义控制器,而应该在stateprovider中定义。通过这种设计,您可以轻松地为不同的控制器重用模板。问题是您正在
模板
状态
定义中初始化控制器。删除
ng controller
表单
questions.html
,仅在状态定义中提及。如果您想在状态定义中使用
vm
use
controllerAs
,那么现在我的服务数据将不会显示
promise.then(function(response){vm.myData=response;
     controller: "questionController",
     controllerAs : "vm"
      controller: "questionController"
 <div ui-grid="{ data: vm.myData }" class="grid"></div>
<div ng-controller="questionController as vm"></div>