2014-09-05 2 views
0

У меня есть переменная в рамках моего контроллера и его значение должны наблюдаться в директиве, используемой на представлении, что-то вроде этого:

<grid options="gridOptions" /> // view's markup 

# --- controller --- 

# not important, just to show that columns loaded lazily  
schemaService.getColumns().then (cols)-> $scope.columns = cols 

$scope.gridOptions = 
    columns: $scope.columns     # here, this wouldn't work 
    # but, if done like this: 
    columns: -> return $scope.columns  # note: it's a function 


# --- and inside the 'grid' directive --- 

cols = -> 
    return scope.options.columns   # again this wouldn't work 
    return scope.options.columns()   # but if it's done like a function - does 

scope.$watch cols, (newVal, oldVal)-> 
    console.log "columns changed" 
,true 

Так как вы может видеть, когда я делаю значение gridOptions.columns функцией - он работает, если я делаю это объектом - $ watch не видит никаких изменений,

И я не хочу, чтобы он как функция, я хочу получить к нему доступ как объект, я даже пытался сделать gridOptions.columns return self executable - до сих пор не работал

Мне любопытно, почему это происходит

ответ

1

Проблема в том, что $scope.gridOptions.columns связан с примитивом. Для того, чтобы это вести себя, как вы хотите, вы должны изменить свой контроллер, так что столбцы передаются по ссылке:

$scope.gridOptions = {} 

schemaService.getColumns().then (cols) -> 
    $scope.gridOptions.columns = cols 

$watch в вашей директиве теперь будет реагировать на изменения, как и ожидалось.

+0

oh ... ладно, это объясняет. благодаря – Agzam

Смежные вопросы