如何从指令中观察绑定到另一个控制器的值?

时间:2015-11-25 08:43:07

标签: angularjs angularjs-directive watch

我正在尝试在视频上传框中观看一些值,我已经正常输入正常工作但是当涉及到我定制的选择框时,事情变得有点棘手,因为它们没有{{1为他们设置。

编辑:这可能是一些孤立的范围问题还是类似的问题?看起来很奇怪,因为我可以看到我从控制器获得所有信息,但手表不想看值。

在我的ng-model控制器中,我这样做是为了为select设置一个“值”:

coForms

在我的指示中,我这样做是为了观察价值观:

coForms.selectOption = function(option) {
  coForms.currentOption = option;
};

如何观看自定义选择框的价值?该值位于video.directive('videoUpload', [function() { return { scope: { video: '=' }, controller: 'CoFormsCtrl', controllerAs: 'co', templateUrl: 'app/views/components/video/video-upload.html', link: function(scope, element, attrs) { scope.$watch('video.title', function(newVal, oldVal) { scope.video.formData.title = newVal; }); scope.$watch('video.description', function(newVal, oldVal) { scope.video.formData.description = newVal; }); scope.$watchCollection('video.tags.filteredTags', function(newVal, oldVal) { scope.video.formData.tags = newVal; }); // How do I make this one work? scope.$watch('scope.co.currentOption', function(newVal, oldVal) { }); } }; }]); ,但在我使用scope.co.currentOptioncontroller声明后,我不明白如何在我的指令中查看此值。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

试试这个:

video.directive('videoUpload', [function() {    
    return {
        scope: {
            video: '='
        },
        controller: 'CoFormsCtrl',
        controllerAs: 'co',
        templateUrl: 'app/views/components/video/video-upload.html',
        link: function(scope, element, attrs, ctrl) {

            // How do I make this one work?
            scope.$watch(function() {
               return ctrl.currentOption;
            }, function(newVal, oldVal) {
               // ...
            });
        }
    };
}]);

答案 1 :(得分:0)

试试这个:  在html <div video-upload ctrl="coForms"></div>和指令中应该是

video.directive('videoUpload', [function() {

    return {
        templateUrl: 'app/views/components/video/video-upload.html',
        link: function(scope, element, attrs) {

             scope.ctrl = scope.$eval(attrs.ctrl);
             scope.video = scope.$eval(attrs.video);
            // How do I make this one work?
            scope.$watch('ctrl.currentOption', function(newVal, oldVal) {
// It will work
            });
        }
    };
}]);

答案 2 :(得分:0)

如果您无法捕获范围级别,请将其分配给$ rootScope.currentOption。 我不确定但是如果你从其他控制器观察model / var并试图在指令中访问它会有问题。

希望这个帮助!!