Javascript 如果在$stateProvider中指定控制器,Angular ui路由器将在加载时运行控制器两次
我看到控制器中的代码运行了两次,从而显示在chrome dev tools中的console.log windows输出中 questions.htmlJavascript 如果在$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
<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
usecontrollerAs
,那么现在我的服务数据将不会显示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>