Angularjs指令专用范围/模型

Angularjs指令专用范围/模型,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我遇到了一个指令问题,这个问题正在成为一个需要解决的难题,这似乎是由于版本1.0.8和版本1.2.0之间的角度变化造成的 在using version 1.0.8中,您可以看到在更改输入文件时,会调用fileChangedfn并更改$scope.file 然而,在使用1.2.0版时,相同的代码并不更新指令 看起来它和具有隔离作用域的指令有关,但不能拥有自己的作用域变量。例如,指令的控制器: controller: function ($scope, $timeout, $upload) {

我遇到了一个指令问题,这个问题正在成为一个需要解决的难题,这似乎是由于版本1.0.8和版本1.2.0之间的角度变化造成的

在using version 1.0.8中,您可以看到在更改输入文件时,会调用
fileChanged
fn并更改
$scope.file

然而,在使用1.2.0版时,相同的代码并不更新指令

看起来它和具有隔离作用域的指令有关,但不能拥有自己的作用域变量。例如,指令的控制器:

controller: function ($scope, $timeout, $upload) {
     $scope.fileCount = 0;
}
...
scope: {
        uploadPath: '@'
},
templateUrl: 'file-uploader.html',
controller: function ($scope, $timeout, $upload)
...

我是否遗漏了一些非常关键的内容?

这不起作用的原因是没有为指令设置模板:

controller: function ($scope, $timeout, $upload) {
     $scope.fileCount = 0;
}
...
scope: {
        uploadPath: '@'
},
templateUrl: 'file-uploader.html',
controller: function ($scope, $timeout, $upload)
...
我确信使用
模板:'html here'
也会起作用,但事实上还有更多的html


隔离作用域发生了变化。表达式
$scope.file=element.files[0]在指令范围内更改
文件
,而不是在指令范围外更改。您需要做的是在指令中的
文件
和指令外部的
文件
之间建立连接

<div file-upload file="file">
  <input type="file" />
  <hr />
  File selected: {{file.name}}
</div>

...

myApp.directive('fileUpload', function(){
  return {
    restrict: 'A',
    scope: {
        file: '='
    },


所选文件:{{File.name} ... myApp.directive('fileUpload',function(){ 返回{ 限制:“A”, 范围:{ 文件:'=' },
谢谢,这也解决了问题,但这意味着任何文件上传的消费者都必须知道该指令是如何工作的,这在本例中是不可取的。@danrichardson在您最初的示例中,开发人员需要知道
输入[type=file]
是必需的,没错。但在迁移之前也是如此;)您的答案肯定是更好的选择,但并没有解决最初的问题:在孤立的作用域和外部世界之间共享数据。这不是迁移问题,我尝试使用早于1.2的版本解决问题(如果可行的话)。尽管如此,我不是在隔离作用域之间共享数据,这是一个添加单向功能的指令。无论如何,再次感谢:)