gpt4 book ai didi

javascript - Angularjs 自定义组件与 ngSwitch 指令编译顺序

转载 作者:行者123 更新时间:2023-12-03 03:32:41 26 4
gpt4 key购买 nike

有以下代码片段:

<my-header></my-header>
<div ng-switch="$ctrl.page">
<div ng-switch-when="1"><component1></component1></div>
<div ng-switch-when="2"><component2></component2></div>
<div ng-switch-when="3"><component3></component3></div>
</div>

我希望在 ngSwitch 指令执行操作之前构建组件 myHeader 。现在 component1 是在 myHeader 之前构建的。

路由代表以下代码:

$stateProvider
.state({
name: 'myApp',
url: '/',
component: 'loader',
})
.state({
name: 'myApp.pages',
url: 'pages/{id:int}',
component: 'loader'
});
$urlRouterProvider.otherwise('/pages/1');

最佳答案

您可以通过在 myHeader 指令内的链接函数中公开 Controller 来实现此目的。

这样,您就可以轻松地向 Controller 添加变量,并使用 ng-if 控制 ng-switch div 的可见性。检查此处的代码片段。

啊,别忘了加上ng-cloak到包含 ng-switch 指令的 div。

angular
.module('app', [])
.controller('TestController', function($scope) {
this.page = 1;
})
.directive('myHeader', function () {
return {
link: function (scope, element, attrs) {
// With element.controller() we can reach the controller that is wrapping our directive. Then, we can simply set the headerIsLoaded variable to true.
element.controller().headerIsLoaded = true;
},
scope: true,
templateUrl: 'my-header.html'
}
});
<div ng-controller="TestController as ctrl">

<my-header></my-header>

<!-- Add a visual feedback so user knows the components are being loaded -->
<div ng-if="!ctrl.headerIsLoaded">
Loading...
</div>

<!-- If ctrl.headerIsLoaded is set to true, the ng-switch will appear -->
<div ng-if="ctrl.headerIsLoaded"
ng-cloak>
<div ng-switch="ctrl.page">
<div ng-switch-when="1">
Page 1
</div>
<div ng-switch-when="2">
Page 2
</div>
<div ng-switch-when="3">
Page 3
</div>
</div>
</div>

</div>

关于javascript - Angularjs 自定义组件与 ngSwitch 指令编译顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46015013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com