Angularjs 角度的自定义指令
您好,我有以下汉堡菜单指示:Angularjs 角度的自定义指令,angularjs,angularjs-directive,snap.js,Angularjs,Angularjs Directive,Snap.js,您好,我有以下汉堡菜单指示: angular.module('app.directives') .directive('hamburger', hamburger); // Injecting Dependencies hamburger.$inject = ['$rootScope', '$timeout']; // Directive's Function, Where All Code is Declared and Executed funct
angular.module('app.directives')
.directive('hamburger', hamburger);
// Injecting Dependencies
hamburger.$inject = ['$rootScope', '$timeout'];
// Directive's Function, Where All Code is Declared and Executed
function hamburger($rootScope, $timeout) {
return {
restrict: 'E',
scope: {
open: '='
},
templateUrl: 'tpls/directives/hamburger.html',
link: function (scope, elem, attr, ctrl) {
scope.$watch('open', function(newValue, oldValue) {
if (newValue == true) {
$timeout(function () {
elem.addClass("open");
}, 2000);
console.log("This is true");
}
else {
$timeout(function () {
elem.removeClass("open");
}, 2000);
console.log("This is false");
}
});
}
}
}
这是模板:
<div>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
好的,我发现了问题所在,我使用了controllerAs语法,从而创建了一个控制器实例(我认为它是如何工作的)作为vm。由于某些原因,我仍然不完全理解我无法将该属性绑定到该实例中的变量。当我将它改为scope.toggleMenu而不是vm.toggleMenu时,它工作了
我对angularjs非常陌生,所以我将假设双向绑定仅适用于范围变量,或者在不使用ControllerAs语法时有效。好的,所以我发现了问题所在,我使用了ControllerAs语法,从而创建了一个控制器实例(我认为它是如何工作的)作为vm。由于某些原因,我仍然不完全理解我无法将该属性绑定到该实例中的变量。当我将它改为scope.toggleMenu而不是vm.toggleMenu时,它工作了
我对angularjs非常陌生,因此我将假设双向绑定仅适用于范围变量,或者当您没有使用ControllerAs语法时。很可能您使用了错误的绑定类型,
@
绑定用于字符串。您可能需要使用=
进行双向绑定。阅读更多:是的,我已经知道了。实际上,我最初使用“=”时它不起作用,我将其改为“@”。此代码看起来不错,您是否有附加到
视图的控制器代码?是的,我也将添加它。很可能您使用了错误的绑定类型,@
绑定用于字符串。您可能需要使用=
进行双向绑定。阅读更多:是的,我已经知道了。实际上,我最初使用“=”时它不起作用,我将其改为“@”。此代码看起来不错,您是否有附加到
视图的控制器代码?是的,我也会添加此代码。
<hamburger class="menu-btn2 pull-left" snap-toggle="left" open="vm.toggleMenu" ng-click="toggle()" ng-dblclick="doNothing()"></hamburger>
vm.toggleMenu = false;
vm.toggle = function () {
vm.toggleMenu = !vm.toggleMenu;
};