angularjs指令不符合范围。$ watch

时间:2015-08-25 05:41:28

标签: angularjs angularjs-directive coffeescript pug

我试图根据控制器变量来关注输入。它在控制台中正确初始化打印值= false,并且变量由控制器在视图中进行更新,但不在指令中。我正在使用jade / coffeescript或Id创建一个示例,但这几乎就是它:

控制器

$scope.autofocus = false

$scope.somefunction = ->
  $scope.autofocus = true

指令。

'use strict'

angular.module('myapp')
.directive 'gsautofocus', ($timeout, $parse) ->
    {
    link: (scope, element, attrs) ->
        model = $parse(attrs.gsautofocus)
        scope.$watch model, (value) ->
            console.log 'value=', value
            if value == true
                $timeout ->
                    element[0].focus()
                    return
            return
    }

查看

input(type="text", gsautofocus="{{autofocus}}")

1 个答案:

答案 0 :(得分:1)

您应该在属性上使用$observe,就像您想要评估每个摘要中的插值包含一样,$watch将无法处理插值。

$观察

  

$observe(key, fn);

     

观察插值属性。   观察器函数将在下一个$摘要期间调用一次   编译后。然后每当调用观察者时   插值变化。

<强>代码

'use strict'

angular.module('myapp')
.directive 'gsautofocus', ($timeout) ->
    {
    link: (scope, element, attrs) ->
        attrs.$observe 'gsautofocus', (value) ->
            console.log 'value=', value
            if value == true
                $timeout ->
                    element[0].focus()
                    return
            return
    }