【发布时间】:2015-09-03 10:58:22
【问题描述】:
我对指令比较陌生,我有这段代码,我从几个不同的来源拼凑而成。首先,我试图将指令更改为 CamelCase,因此指令的名称将类似于 myResize 但我似乎无法做到。我知道 angular 会进行规范化,所以我知道在我的 div 上它应该是 my-resize 而在我的指令上它应该是 myResize 但这不起作用?
另外,有人能解释一下 bind scope.$apply 函数在做什么吗?我认为当 scope.getWindowDimensions 发生变化时,单独的 $watch 会更新 scope.adjustForm,但显然情况并非如此。代码工作正常,我只是不知道为什么。
<div id='landingWrapper' ng-class='{"centerForm": adjustForm}' resize></div>
.directive('resize', function ($window) {
return function (scope, element) {
var w = angular.element($window);
scope.getWindowDimensions = function () {
return { 'h': w.height(), 'w': w.width() };
};
scope.$watch(scope.getWindowDimensions, function (newValue, oldValue) {
var windowHeight = newValue.h;
var formHeight = element[0].offsetHeight;
if (formHeight > windowHeight) {
scope.adjustForm = false;
}
else {
scope.adjustForm = true;
}
}, true);
w.bind('resize', function () {
scope.$apply();
});
}
})
【问题讨论】:
-
scope.$apply() 更新你的绑定
-
为什么 $watch 不会自动发生这种情况?当我在控制器而不是指令中使用 $watch 时,它似乎以这种方式工作?
标签: angularjs angularjs-directive