Angular.js子输入元素没有获得父范围

时间:2014-01-19 09:38:32

标签: angularjs

这应该很简单,但出于某些原因我有

<div class="file-navigator" ng-controller="FileSystemCtrl">
        <input type="file" id="openFile" ng-model="path" ng-change="openFolder()" nwdirectory />

ng-change未被触发。 如果我使用

onchange="angular.element(this).parent().scope().openFolder()"

onchange事件被触发,但很明显,这很难看。

FileSystemCtrl被定义为我导入我的应用程序的模块,它的结构如下。

angular.module('myApp.FileSystemModule',[])
.factory('FileSystemModel',function($rootscope){...})
.controller('FileSystemCtrl',function(){...});

为什么孩子不知道它的父控制器?特别是因为孩子没有自己的控制器?

2 个答案:

答案 0 :(得分:1)

AngularJs不支持输入类型文件。见this issue。并且this。您的onchange事件是目前最好的选择。

答案 1 :(得分:1)

另一种方法是使用directive利用$compileng-model进行互动:

.directive('path', function($compile) { 
    return {
        restrict: 'E',//<path></path> in your markup
        replace: true,
        template: '<input type="file" />',
        link: function(scope, elem, attrs) {
                var textField = $(elem).attr('ng-model', 'something');

                $compile(textField)(scope);

                $(elem).change(function() { 
                      //do stuff 
                });

        }
    };
});

我没有测试它,但它为你提供了一个开始。