指令更新的范围变量不会反射(reflect)在页面上我们有 {{variable}}
的位置,但是当我执行 console.log(scope)
时,它们确实显示为已更新。
<script>
var demoApp = angular.module('demoApp', []);
demoApp.controller('demoController', function demoController($scope) {
$scope.myElementId ="abcd";
$scope.updateVals = function() {
$scope.myElementClass = "";
};
});
demoApp.directive('demoSelect', function() {
return {
restrict: 'A',
controller: 'demoController',
link: function(scope, element, attrs, controller) {
element.on("click", function(event) {
event.stopImmediatePropagation();
event.preventDefault();
scope.ele = angular.element(event.target);
angular.element(".selected").removeClass("selected");
$(scope.ele).addClass("selected");
var mm = $(scope.ele).get(0);
scope.myElementId = $(scope.ele).attr("id");
scope.myElementClass = $(scope.ele).attr("class");
scope.myElementType = mm.tagName;
});
}
};
});
</script>
Here is the plunker 为它。我错过了什么?
最佳答案
您的演示中有几个错误:
demoApp
和 demoController
,而不是 demo-app
和 demo-controller
。 考虑到上述情况,您的指令的链接函数的主体应如下所示:
element.on('click' , function(evt) {
evt.stopImmediatePropagation();
evt.preventDefault();
$('.selected').removeClass('selected');
element.addClass('selected');
scope.$apply(function () {
scope.myElementId = attrs.id;
scope.myElementClass = attrs.class;
scope.myElementType = element.prop('tagName');
});
});
另请参阅此 woking demo 。
关于angularjs - 从指令更新范围变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21220480/