<div ng-controller="MyCtrl">
<button ng-click="show=true">show</button>
<dialog title="Hello }"
visible="}"
on-cancel="show=false;"
on-ok="show=false;parentScope();">
<!--上面的on-cancel、on-ok,是在directive的isoloate scope中通过&引用的。
如果表达式中包含函数,那么需要将函数绑定在parent scope(当前是MyCtrl的scope)中-->
Body goes here: username:} , title:}.
<ul>
<!--这里还可以这么玩~names是parent scope的-->
<li ng-repeat="name in names">}</li>
</ul>
<div>
Email:<input type="text" ng-model="email" style="width: 200px;height:20px"/>
</div>
<div>
Count:<input type="text" ng-model="person.Count" style="width: 120px;height:20px"/>
<button ng-click="changeCount()">Count加1</button>
</div>
<p></p>
</dialog>
</div>
var app = angular.module("Dialog", []);
app.controller("MyCtrl", function ($scope) {
$scope.person = {
Count: 0
};
$scope.email = 'carl@126.com';
$scope.names = ["name1", "name2", "name3"];
$scope.show = false;
$scope.username = "carl";
$scope.title = "parent title";
$scope.parentScope = function () {
alert("scope里面通过&定义的东东,是在父scope中定义");
};
$scope.changeCount = function () {
$scope.person.Count = $scope.person.Count + 1;
}
// 监听controller count变更, 并发出事件广播,再directive 中 监听count CountStatusChange变更事件
$scope.$watch('person.Count', function (newVal, oldVal) {
console.log('>>>parent Count change:' + $scope.person.Count);
if (newVal != oldVal) {
console.log('>>>parent $broadcast count change');
$scope.$broadcast('CountStatusChange', {"val": newVal})
}
});
});
app.directive('dialog', function factory() {
return {
priority: 100,
template: ['<div ng-show="visible">',
' <h3>}</h3>',
' <div class="body" ng-transclude></div>',
' <div class="footer">',
' <button ng-click="onOk()">OK</button>',
' <button ng-click="onCancel()">Close</button>',
' </div>',
'</div>'].join(""),
replace: false,
transclude: true,
restrict: 'E',
scope: {
title: "@",//引用dialog标签title属性的值
visible: "@",//引用dialog标签visible属性的值
onOk: "&",//以wrapper function形式引用dialog标签的on-ok属性的内容
onCancel: "&"//以wrapper function形式引用dialog标签的on-cancel属性的内容
},
controller: ['$scope', '$attrs', function ($scope, $attrs) {
// directive scope title 通过@ 引用dialog标签title属性的值,所以这里能取到值
console.log('>>>title:' + $scope.title);
>>>title:Hello carl scope.html:85
// 通过$parent直接获取父scope变量页可以
console.log('>>>parent username:' + $scope.$parent.username);
>>>parent username:carl
// directive scope 没有定义username 变量,并且没有引用父scope username变量, 所以这里是undefined
console.log('>>>child username:' + $scope.username);
>>>username:undefined
// 接收由父controller广播count变更事件
$scope.$on('CountStatusChange', function (event, args) {
console.log("child scope on(监听) recieve count Change event :" + args.val);
});
// watch 父 controller scope对象
$scope.$parent.$watch('person.Count', function (newVal, oldVal) {
console.log('>>>>>>>child watch parent scope[Count]:' + oldVal + ' newVal:' + newVal);
});
}]
};
});
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有