我有一个component()注入导航的。当我尝试像这样包含controller内部时component,出现错误。
内部导航.html
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Demo</a>
</div>
<div id="navbar" class="collapse navbar-collapse" ng-controller="MainMenuController">
<ul class="nav navbar-nav">
<li ng-class="{ active: isActive('') }"><a href="./">home</a></li>
<li ng-class="{ active: isActive('/skus') }"><a href="sku.html">sku</a></li>
<li ng-class="{ active: isActive('/phones') }"><a href="phone.html">phone</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
Run Code Online (Sandbox Code Playgroud)
在 component.js 中
angular.
module('mainMenu').
component('mainMenu', {
templateUrl: 'app/core/nav/nav.html',
controller: 'MainMenuController', ['$scope', '$location',
function NavController($scope, $location) {
$scope.isActive = function (viewLocation) {
var p1 = $location.path();
var p2 = '/' + p1.split("/")[1]; // split string from '/';
if(p2=='/undefined') p2 = '';
return viewLocation === p2;
}
}
]
});
Run Code Online (Sandbox Code Playgroud)
但是如果我像这样编写一个单独的控制器,一切正常。我做错了什么component(),我不应该将控制器包括在component()最佳实践中吗?
angular.
module('mainMenu').
component('mainMenu', {
templateUrl: 'app/core/nav/nav.html',
});
Run Code Online (Sandbox Code Playgroud)
angular.
module('mainMenu').
controller('MainMenuController', ['$scope', '$location',
function NavController($scope, $location) {
//this.navs = Nav;
$scope.isActive = function (viewLocation) {
var p1 = $location.path();
var p2 = '/' + p1.split("/")[1]; // split string from '/';
if(p2=='/undefined') p2 = '';
return viewLocation === p2;
};
}
]);
Run Code Online (Sandbox Code Playgroud)
我把我的改成component这个
angular.
module('mainMenu').
component('mainMenu', {
templateUrl: 'app/core/nav/nav.html',
controller: ['$scope', '$location',
function MainMenuController($scope, $location) {
//this.navs = Nav;
$scope.isActive = function (viewLocation) {
var p1 = $location.path();
var p2 = '/' + p1.split("/")[1]; // split string from '/';
if(p2=='/undefined') p2 = '';
return viewLocation === p2;
};
}
]
});
Run Code Online (Sandbox Code Playgroud)
出错 Error: [ng:areq] http://errors.angularjs.org/1.5.8/ng/areq?p0=MainMenuController&p1=not%20a%20function%2C%20got%20undefined
N
修复:通过清理module和component标题并使它们唯一,ng-controller从模板中删除;尼尔汉密尔顿在下面的回答解决了我最初的问题。
这是我添加控制器时的偏好...
MainMenuController.$inject = ['$scope', '$location'];
function MainMenuController($scope, $location) {}
angular.module('menu').component('mainMenu', {
controller: MainMenuController,
controllerAs: 'MainMenuController',
templateUrl: 'app/core/nav/nav.html'
});
Run Code Online (Sandbox Code Playgroud)
您尝试对内联依赖项进行的样式...
angular.module('menu').component('mainMenu', {
controller: ['$scope', '$location', function($scope, $location) {}],
controllerAs: 'MainMenuController',
templateUrl: 'app/core/nav/nav.html'
});
Run Code Online (Sandbox Code Playgroud)
不同之处在于您拥有带有控制器声明的 ControllerAs 字符串。您应该使用 controllerAs: "NameForController" 属性来命名控制器。
祝你好运!
| 归档时间: |
|
| 查看次数: |
3721 次 |
| 最近记录: |