Javascript 控制器,指令控制器,编译,链接-工作流(编译功能不工作)
在下面的程序中,函数应该如下->控制器,指令控制器,编译,链接。但是,Compile函数中似乎有一些错误Javascript 控制器,指令控制器,编译,链接-工作流(编译功能不工作),javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,在下面的程序中,函数应该如下->控制器,指令控制器,编译,链接。但是,Compile函数中似乎有一些错误 <html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.min.js" ></script> </head> <body ng-app="myApp" ng-controller="myCtr
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.min.js" ></script>
</head>
<body ng-app="myApp" ng-controller="myCtrl">
<people></people>
<script>
//1 module declaration
var app = angular.module("myApp",[]);
//3 controller declaration
app.controller('myCtrl',function($scope){
//before going to directive
$scope.name = "One";
});
//5 directives declaration
app.directive('people',function(){
return{
restrict: 'E',
template: '<div>{{name}}</div>',
//before compilation
controller: function($scope, $element){
$scope.name = $scope.name + "Two";
},
compile: function($scope, $element){
$scope.name = $scope.name + "Three";
},
//after compilation
link: function($scope, el, attr){
$scope.name = $scope.name + "Four"
}
}
});
</script>
</body>
</html>
结果
OneTwo
但是,如果我从指令中删除编译函数,我会得到以下结果:
OneTwoFour
compile函数没有在$scope.name中呈现“三”有什么问题 从以下文件中获取的片段:
仅当未定义compile属性时,才使用link属性。要在编译前和编译后执行某些操作,请在编译函数中返回以下内容:
function compile(tElement, tAttrs, transclude) {
return {
pre: function preLink(scope, iElement, iAttrs, controller) { ... },
post: function postLink(scope, iElement, iAttrs, controller) { ... }
}
}
如果不使用preLink或postLink,中的$scope变量在编译函数中不可用
function compile(tElement, tAttrs, transclude) { ... }
- tElement-模板元素-声明指令的元素。只对元素和子元素进行模板转换是安全的
- tAttrs-模板属性-所有指令编译函数共享的在此元素上声明的属性的规范化列表
- transclude-[不推荐!]一个transclude链接函数:函数(作用域,克隆链接fn)
这里有一个例子来说明:希望这在你的代码中不应该是个问题,但是这里的拼写错误
restric:'E',
不,对不起,是打字错误。下面的答案有用吗?如果您需要任何进一步的信息,请告诉我。我希望看到“三”由编译函数打印(或通过其中的pre或post打印)。对于指令->控制器和指令->链接,仍然不清楚这个编译的位置。@Peterson我在下面创建了一个plnkr。
function compile(tElement, tAttrs, transclude) { ... }