当我正在使用angularjs 1.1.4中的ng-view和ng-animate时,我注意到指令执行了两次.一次用于进入屏幕的视图中的元素,一次用于离开屏幕的视图中的元素(当视图进入屏幕时已经为元素执行了指令).
根据我的理解,指令只应对进入屏幕的元素执行,而不是对离开的元素执行.还是我错过了什么?
<div ng-app="app">
<div ng-controller="AppCtrl">
<div class="btn-group">
<a class="btn btn-primary" href="./">foo</a>
<a class="btn btn-primary" href="bar/">bar</a>
</div>
<span class="btn btn-success">{{count}}</span>
<div class="view" ng-view ng-animate="{enter: 'view-enter', leave: 'view-leave'}"></div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
var app = angular.module('app', []);
app.config(function ($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
template: '<h1 color>foo</h1>'
})
.when('/bar', {
template: '<h1 color>bar</h1>'
})
.otherwise({
redirectTo: '/'
});
$locationProvider.html5Mode(true);
});
app.controller('AppCtrl', function ($scope) {
$scope.count = 0;
$scope.incrementCount = function () {
$scope.count++;
}
});
app.directive('color', function () {
return {
restrict: …Run Code Online (Sandbox Code Playgroud) 我有没有其他可能处理Ember.Router控制器和视图?我的app结构通常依赖于require.js来处理相应的依赖关系.
在我的例子中,我正在将App.ApplicationController作为主路由器控制器.
这是一个jsfiddle:http://jsfiddle.net/mediastuttgart/uMKGt/1/
但有没有机会手动设置?我发现这个提交消息https://github.com/emberjs/ember.js/commit/be69395f5eec4187b1df052d7386bcda45f79475我可以看到,如何设置控制器和手动查看(无论如何都无法正常工作).但是找不到像这样的例子:
App = Ember.Application.create();
App.MyController = Ember.Controller.extend({});
App.MyView = Ember.View.extend({});
Router = Ember.Router.extend({
applicationController : App.MyController,
root : Ember.Route.extend({
index : Ember.Route.extend({
route : '/',
connectOutlets : function (router) {
router.get('applicationController').connectOutlet(App.MyView);
}
})
}),
...
});
Run Code Online (Sandbox Code Playgroud)
编辑
我想详细解释一下这个问题.虽然我们使用require.js来管理或依赖,但我们有多个控制器负责整个应用程序的各个部分.假设我们有一份简报注册表格.用于此场景的控制器是结构化的
- app
-- controller
--- newsletter
---- signup.js
--- cart
--- checkout
-- view
-- model
-- router
-- template
Run Code Online (Sandbox Code Playgroud)
因为我们使用自定义函数来生成在Em.Provide('App.Controller.Newsletter');其中创建对象的命名空间App.Controller.Newsletter.此对象现在充当整个新闻稿应用程序的控制器基础.从App.Controller.Newsletter.Signup = Ember.Controller.extend({});我们开始,我们需要将此实例作为路由器的"ApplicationController"传递.如您所见,我们不能仅仅使用App.ApplicationController实例化Ember.Router的控制器.